2011-04-18 95 views
0

我正在編寫一個小用戶腳本,在我經常使用的phpBB論壇的用戶配置文件圖像旁包含一個鏈接。在點擊鏈接,我得到一個錯誤象下面這樣:在userscript的未捕獲ReferenceError:doit未定義

Uncaught ReferenceError: doit is not defined 
(anonymous function)   viewtopic.php:542 
onclick       viewtopic.php:543 

部分:

(function(){ 

    var script = document.createElement('script'); 
    script.textContent = '(' + twk.toString() + ')();'; 
    document.body.appendChild(script); 

    function twk() { 

     pd = document.getElementsByClassName('postdetails'); 

     for (i=0 ; i<(pd.length); i++) { 
      ele = document.createElement("a"); 
      ele.innerHTML ='<a href=\'#\' onclick=\'doit();\'>Quick reply</a>'; 

      pd[i].appendChild(ele); 

     } 

    function doit() { 
     selec = document.getSelection().anchorNode.textContent; 
     document.getElementsByClassName("row2").item('message').innerHTML = selec; 

    } 

} 




})(); 

任何人都可以請指出哪裏/我究竟做錯了什麼?

回答

4

首先,你創建你的元素都錯了。它應該是這樣的:

var link = document.createElement('a'); 
link.setAttribute('href', '#'); 
link.innerHTML = 'New text'; 

而且將事件添加到它:最後

link.onclick = doit

,將其添加到頁面就像你正在做的:

pd[i].appendChild(ele);

你可能想要考慮使用像jQuery或Mootools這樣的框架,它會讓你的生活變得更容易。有時與瀏覽器做類似的事情有衝突。我個人喜歡Mootools,但jQuery更容易上手,特別是對於小型項目。

編輯:

我加了innerHTML的例子。我只是使用一個框架,而不是這樣做的困難。

+0

沒有第二個呢? ;)如何將文本添加到錨點? – Sathya 2011-04-18 17:48:36

+1

@Sathya,'var text = document.createTextNode(「text goes here」); link.appendChild(text);' – 2011-04-18 17:49:36

+0

謝謝。 @MattMcDonald – Sathya 2011-04-18 19:02:40

3

解開一切事情,從外部匿名函數,它應該工作:

+0

賓果。 'onclick'屬性不能訪問'doit'函數,因爲它被封裝在自調用匿名函數中。該函數是爲了隱藏任何全局變量,所以試圖從函數外部訪問任何東西都會導致錯誤。 – 2011-04-18 17:48:50

+0

困境。你所提出的變化以及@Tjameson提到的都有所幫助。無法確定接受哪個答案:\謝謝。 – Sathya 2011-04-18 18:37:50

+0

@Sathya,由你決定^ _^ – Neal 2011-04-18 18:39:10

相關問題