小编Log*_*ton的帖子

在.load()之后触发两次jQuery事件

我遇到过一个问题,即在调用$ .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())位之前就行了!

javascript jquery events

10
推荐指数
1
解决办法
8441
查看次数

标签 统计

events ×1

javascript ×1

jquery ×1