2013-08-03 68 views
1

我使用rangy腳本來做一個簡單的jquery函數,但是我不能使它工作,它說上面的錯誤。未捕獲ReferenceError:函數未定義

<div onclick="cmon('cenas');"> cenas </div> 

<textarea class="guides_chapters_textarea" id="textarea" name="gmessage" rows="7" cols="25"> Insert starting items here</textarea> 

的Javascript:

function cmon(text){ 
    $("#textarea").insertText(text, 0, "collapseToEnd"); 
} 

的jsfiddle:http://jsfiddle.net/VmhMM/

+1

'沒有換 - ' – elclanrs

+0

@Quentin不解決我的問題,我不想使用onload:x我想要一個避免onload的解決方案。 –

+2

@CristianoMarques - 由於重複的問題說,使用onload是你有你的問題的原因。如果你不想使用它,爲什麼你使用它?它對你的代碼沒有任何幫助。 – Quentin

回答

3

,讓您的工作例如,有一些事情可以做。嚴格地說,你的代碼實際上沒有錯。錯誤在於你的代碼如何被使用/添加到頁面中。

Here is one通過直接在window對象上設置對象的函數來獲取代碼的方法。

window.cmon = function cmon(text){ 
    $("#textarea").insertText(text, 0, "collapseToEnd"); 
} 

通過@elclanrs關於該問題(這是在這種情況下,一個更好的選擇)點在的jsfiddle左側面板中的設置註釋中與您的功能正在運行做的另一種方法。默認情況下,它將其添加到onLoad事件中,該事件使得該功能超出範圍,因爲它在事件內部定義。這裏是什麼的jsfiddle做你的代碼:

$(window).load(function(){ 
    function cmon(text){ 
    $("#textarea").insertText(text, 0, "collapseToEnd"); 
    } 
}); 

那是怎麼回事被稱爲closures的概念。所以當你定義一個函數時,在其中定義的任何變量或其他函數都不能從外部訪問。如果將變量設置在全局對象或任何其他超出新定義函數範圍的對象上(就像我在鏈接的示例中那樣),則可以訪問您在閉包之外定義的內容。

+1

非常感謝! :) –

+0

我在我的網站上得到這個錯誤:Uncaught TypeError:Object [object Object] has no method'insertText'|它沒有加載rangy腳本嗎? –

+0

聽起來像你沒有在你的網站上使用jQuery,然後像小提琴那樣。可能需要檢查出來。 – Turnerj

0

您必須在左側使用(在頭無包裝)。這意味着你必須在標籤之間加載這個腳本。但是,如果你仍然想使用它的onload則:

<div id="cmon"> cenas </div> 
    <textarea class="guides_chapters_textarea" id="textarea" name="gmessage" rows="7" cols="25"> Insert starting items here</textarea> 
    <script> 

     $("#cmon").click(function(){ 
      cmon($(this).text()); 
     }); 

     function cmon(text){ 
      $("#textarea").insertText(text, 0, "collapseToEnd"); 
     } 
    </script> 

這裏是解決方案:http://jsfiddle.net/VmhMM/2/