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

jQuery event firing twice after .load()

本文关键字:两次 jQuery load 之后 事件      更新时间:2023-09-26

我遇到一个问题,在调用$.load()后,jQuery事件会触发两次。事件处理程序被放置在load()回调函数中,这似乎是唯一一个在脚本上触发两次事件的地方。

我尝试添加event.stopPropagation()和event.prventDefault(),因为这些似乎是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();
                });

您可以清楚地看到,使用我在其中的console.log位,事件启动了两次。任何建议都将不胜感激!


编辑

好吧,我根据一些建议查看了直播页面上的所有内容,肯定只有一个<div id="questions">在问题发生时存在。所以,这似乎不是HTML的问题。

我还检查了该事件是否真的被调用了两次,据我所知,该事件只被调用了一次。

现在,我在文档中添加了一个.on()事件,该事件在动态创建的元素上调用,并且只触发一次。on()未在.load()回调中调用。下面是一个在页面上的其他输入框上使用的例子,它可以毫无问题地工作:

$(document).on('change', "#SWA_mothers_income", function(){
console.log("mothers income changes from on()");
});

因此,这可以正常工作,但当在.load()回调函数中对同一输入进行测试时,无论如何调用,它都会触发两次。所以,在我看来,几乎可以肯定这是.load()的问题。我不会完全称自己为这方面的专家,所以如果有人能解决这个问题,我很想知道答案。目前,我将使用.on().重写此代码


第二次编辑

添加$("#some_id").ubind("change");在'change(function())位成功之前!

添加此行

$("#some_id").unbind('change');

之前

$("#some_id").change(function(){});

我不是说这会解决你的问题,但你需要传入事件才能引用它。

$("#some_id").change(function(event){
    cantBeNegative(this);
    adjusted_gross_income = $(this).val();
    console.log(adjusted_gross_income);
    event.stopPropagation();
    event.preventDefault();
});

您可能有两个div,其中包含一类"questions",因此您可能要绑定change函数两次。

如果您将更改函数更新为以下内容,则在重新添加更改事件之前,将解除对其的绑定。这将确保您只绑定了一次函数;

            $("#some_id").unbind('change').change(function(event) {
                event.preventDefault();
                cantBeNegative(this);
                adjusted_gross_income = $(this).val();
                console.log(adjusted_gross_income);
            });