Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery单击事件触发两次_Javascript_Jquery_Events - Fatal编程技术网

Javascript Jquery单击事件触发两次

Javascript Jquery单击事件触发两次,javascript,jquery,events,Javascript,Jquery,Events,我正在用Jquery构建一些东西,并且正在进行一些Ajax调用。所以在ajax调用之后,我需要调用函数来再次跟踪对某些元素的单击。以下是此类功能的一个示例: $(document).ready(function () { initSomething(); }); function initSomething(){ $('.something').click(function(){ alert('hello'); }); } $('#AddSomethin

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

$(document).ready(function () {
    initSomething();
});
function initSomething(){
    $('.something').click(function(){
        alert('hello');
    });
}
$('#AddSomething').click(function(){
    $.post('somewhere.php',{data},function(data){
        initSomething();
    });
});
现在是ajax函数:

$(document).ready(function () {
    initSomething();
});
function initSomething(){
    $('.something').click(function(){
        alert('hello');
    });
}
$('#AddSomething').click(function(){
    $.post('somewhere.php',{data},function(data){
        initSomething();
    });
});
问题是:当我开始做某件事时,我会感觉到;第二次,它就像是在第一个init已经跟踪的元素上读取一个click事件,这是在documentready上调用的东西

所以我尝试了像e.preventDefault和e.preventPropagation这样的东西,但它似乎不起作用,我遗漏了什么

谢谢你的回答,祝你度过愉快的一天

编辑:如答案所示,我忘了说Ajax调用正在插入新的元素


编辑2:这里有一个JSFIDLE:

没有必要从我看到的代码中重新绑定单击


只要不重新绑定,您就不会出现多次单击问题。

使用事件委派来代替它

 $(document).on('click','.something',function(){
        alert('hello');
    });
那么就不需要调用initSomething;函数在ajax之后运行。

尝试使用api删除已连接的事件并重新分配事件,如下所示

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

希望这有帮助……

这是如何回答这个问题的?在一个对象上仍将处理多个单击事件。@用户正在再次尝试绑定该事件,。也许应该是针对ajax之后创建的新元素。这是一种合适的方法,不知道为什么会被否决。尽管如此,解释还是可以改进的。如果它解释了原因,特别是解释了为什么应该删除对initSomething的后续调用,以及为什么,我会+1这个。因为这对提出问题的人来说毫无意义。这会改变什么吗?函数initSomething{$'.something'。关闭“单击”;$'.something'。单击函数{alert'hello';};}Addsomething和.something可能是同一个元素,或者一个是另一个元素的子元素?澄清一下,您是否在ajax调用期间添加了新的.something元素,您还需要将单击处理程序附加到该元素?如果您提供JSFIDDLE,使用ajax调用在DOM中插入新的.something,然后应使用带有.on的事件委派。这个问题的写作方式很难说明这里发生了什么…:-嗯,它工作得很好!谢谢它的解决方案,帮助我最好地保持我的实际代码。。。