0

我正在使用 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!'));
  });

alert('hey!') 是我仍在研究的功能的填充物。这应该如何组织,以便在单击链接而不是在页面加载时触发单击事件?$('.showMore') 事件正常工作,即使我更改了顺序。

4

2 回答 2

3

这是因为您在那里调用警报函数而不是传递回调函数引用。

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

$('.tweet li a.username').on('click', function(){
    alert('hey!')
});
于 2013-10-08T16:04:39.693 回答
1

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

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

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

于 2013-10-08T16:04:30.240 回答