我遇到过一个问题,即在调用$ .load()之后jQuery事件会触发两次.事件处理程序放在load()回调函数中,这似乎是事件在脚本上触发两次的唯一地方.
我已经尝试添加event.stopPropogation()和event.preventDefault(),因为这些似乎是jQuery事件触发多个的常见建议.我不确定我的代码是不正确的冒泡还是什么.任何反馈都会有所帮助.
以下是您看到行为的一些代码的摘录.
$("div.questions").load("question_source.php #simplified_a", function(){
...
// Line 1
$("#some_id").change(function(){
cantBeNegative(this);
adjusted_gross_income = $(this).val();
console.log(adjusted_gross_income);
// event.stopPropagation();
// event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
您可以使用我在那里的console.log位清楚地看到事件触发两次.任何意见,将不胜感激!
好的,我根据一些建议检查了实时页面上的所有内容,当问题发生时,肯定只有一个<div id ="questions">存在.所以,它似乎不是一个HTML问题.
我还检查了事件是否实际被调用了两次,据我所知,事件只被调用一次.
现在,我添加了一个附加到文档的.on()事件,该事件在动态创建的元素上调用,并且只触发一次..on()不在.load()回调中调用.这是在页面上的其他输入框之一上使用的示例,它没有任何问题:
$(document).on('change', "#SWA_mothers_income", function(){
console.log("mothers income changes from on()");
});
Run Code Online (Sandbox Code Playgroud)
因此,这可以正常工作,但是当在.load()回调函数中的相同输入上进行测试时,它会触发两次,无论它是如何调用的.所以,在我看来,这几乎肯定是.load()的一个问题.我不会说自己是这方面的专家,所以如果有人能解决问题,我很想知道答案.就目前而言,我将使用.on()重写此代码.
添加$("#some_id").unbind('change'); 在'change(function())位之前就行了!