我正在创建一个使用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')事件也能正常工作。
答案 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
,并且很乐意这样做。)