为什么在jQuery中自动触发此单击事件?

时间:2013-10-08 16:02:45

标签: javascript jquery

我正在创建一个使用JS / jQuery作为学习练习的简单应用程序,并且遇到了我之前遇到的问题,似乎无法解决。在下面的代码中,为什么会自动触发第二次单击事件而不是单击$('。tweet li a.username')?

$(function(){
   setInterval(update, 3000);
    $('.showMore').on('click', function() {
      moreIndex += 5;
      update();
    })
    $('.tweet li a.username').on('click', alert('hey!'));
  });
警告('嘿!')是我正在努力的功能的填充物。如何组织这样,以便在单击链接时触发click事件,而不是在页面加载时触发?即使我更改了订单,$('。showMore')事件也能正常工作。

2 个答案:

答案 0 :(得分:3)

这是因为你在那里调用alert函数而不是传递回调函数引用。

在您的情况下,您正在调用alert()函数并将alert返回的值作为单击事件处理程序传递。

$('.tweet li a.username').on('click', function(){
    alert('hey!')
});

答案 1 :(得分:1)

您需要将警报包装在回调函数中,就像第一个示例一样:

$('.tweet li a.username').on('click', function() { alert('hey!') });

.on方法期望处于该位置的JavaScript对象,特别是一个函数,它可以在以后执行。原始代码中发生的事情是JavaScript引擎正在寻找一个函数,但是在那里看到一些其他代码 - 所以它在那里执行代码(激活警报),希望返回一个有用的对象。 (当没有返回任何内容时,JavaScript引擎会假定您希望在单击事件上执行null,并且很乐意这样做。)