繁体   English   中英

Jquery 点击事件触发两次

[英]Jquery click event fire twice

我正在使用 Jquery 构建一些东西,并且正在进行一些 Ajax 调用。 所以在我的 ajax 调用之后,我需要调用函数来再次跟踪对某些元素的点击。 这是此类函数的示例:

$(document).ready(function () {
    initSomething();
});
function initSomething(){
    $('.something').click(function(){
        alert('hello');
    });
}

现在是一个 ajax 函数:

$('#AddSomething').click(function(){
    $.post('somewhere.php',{data},function(data){
        initSomething();
    });
});

问题是:我觉得当我 initSomething(); 第二次,它就像在文档就绪时调用的第一个 initSomething 已经跟踪的元素上读取单击事件。

所以我尝试了 e.preventDefault 和 e.preventPropagation() 之类的东西,但它似乎不起作用,我错过了什么?

感谢您的回答,祝您有美好的一天!

编辑:正如在答案中看到的,我忘了说 Ajax 调用正在 DOM 中插入新的 .something 元素......

编辑 2:这里有一个 jsfiddle: https ://jsfiddle.net/wpsnz7op/

尝试.off() api 删除已经附加的事件并重新分配事件,如下所示。

function initSomething(){
    $('.something').off('click').click(function(){
        alert('hello');
    });
}

希望这可以帮助....

没有必要根据我在那里看到的代码重新绑定点击。

只需不要重新绑定,您就不会遇到多次点击问题。

使用事件委托代替。

 $(document).on('click','.something',function(){
        alert('hello');
    });

那么就不需要调用initSomething(); ajax 之后的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM