簡體   English   中英

在.load()之后觸發兩次jQuery事件

[英]jQuery event firing twice after .load()

我遇到過一個問題,即在調用$ .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();
                });

您可以使用我在那里的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”)。unbind('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,因此您可以將更改功能綁定兩次。

如果您將更改功能更新為以下內容,則會在重新添加之前取消綁定更改事件。 這將確保您只有一次綁定的函數;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM