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

Why is this click event automatically triggered in jQuery?

本文关键字:事件 jQuery 为什么      更新时间:2023-09-26

我正在使用 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') 事件工作正常,即使我更改了顺序。

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

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

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

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

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

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