2011-04-18 62 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

相关问题