我正在使用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跟踪的元素上的click事件。
所以我尝试了类似e.preventDefault和e.preventPropagation()的东西,但它似乎不起作用,我错过了什么?
感谢您的回答并度过愉快的一天!
编辑:正如在答案中看到的那样,我忘了说Ajax调用是在DOM中插入新的.something元素......
编辑2:这里有一个jsfiddle:https://jsfiddle.net/wpsnz7op/
答案 0 :(得分:0)
尝试.off() api删除已经附加的事件并重新分配事件,如下所示。
function initSomething(){
$('.something').off('click').click(function(){
alert('hello');
});
}
希望这会有所帮助......
答案 1 :(得分:-1)
没有必要重新点击我所看到的代码中的点击次数。
不要重新绑定,也不会出现多次点击问题。
答案 2 :(得分:-1)
使用事件委托代替。
$(document).on('click','.something',function(){
alert('hello');
});
然后在ajax之后不需要调用initSomething();
函数。