我无法让我的JavaScript eventlistener正常工作

时间:2010-03-02 11:02:52

标签: javascript scope greasemonkey closures event-listener

这让我很难过,我尝试了很多不同的东西,但我无法让它发挥作用。 有人可以帮忙吗?无论我尝试什么,我都无法触发链接上的click eventlistener。代码在一个greasemonkey脚本中。我相信我必须使用closure方法来引用greasemonkey脚本中的函数dropit,因为它不能用于页面上的代码。

dropit = function (e) {
  e.preventDefault();
  alert(e.target.textContent);
}

document.getElementById('newlink').addEventListener('click',
         function (e){
                   return function (){
                     dropit(e);
                   }
                 }(),false);

4 个答案:

答案 0 :(得分:2)

您必须将Greasemonkey脚本代码写入页面中的新<script>标记。完成后,您的页内事件处理程序设置可以正常进行。至少,这是我所知道的唯一方法。

答案 1 :(得分:0)

必须将

e传递给addEventListener中的第二个函数,而不是第一个。 像这样:

dropit = function (e) {
  e.preventDefault();
  alert(e.target.textContent);
}

document.getElementById('newlink').addEventListener('click',
         function (e){
                   return function (e){
                     dropit(e);
                   }
                 }(e),false);

答案 2 :(得分:0)

<a id='mylink' href='http://www.google.com'>google</a> the link 

<script src="http://yui.yahooapis.com/3.0.0/build/yui/yui-min.js"></script>
<script>
YUI().use('event', function(Y){

  Y.one('#mylink').on('click', function(e){
    e.halt();
    alert(this.get('href'));  
  });
}); 
</script>

答案 3 :(得分:0)

这里是非YUI版本

<a id='mylink' href='#'>google</a> the link 

<script>

(function(){
  var dropit = function (e) {
    e.preventDefault();
    alert(e.target.textContent);
  }

  document.getElementById('mylink').addEventListener('click', dropit, false);
}());
</script>