2017-03-06 173 views
0

我在JQuery中遇到了一些與事件綁定有關的奇怪問題。我們有很多輸入,我們想知道它們的值是否由用戶更改。我重視他們的活動,這些方式:綁定之前執行的事件和綁定後觸發的事件

$(document).on("change", ".myClass", changed); 

但有時我們必須執行在這些領域進行自動更改,所以我取消綁定這些事件,執行的變化,爲了避免這些更新變化triggerings再次綁定的事件:

$(document).off("change", ".myClass"); 
$(".myClass").val(whatever); 
$(document).on("change", ".myClass", changed); 

但是,如果我們點擊其中一個輸入這最後的過程中,我們得到的是後即使現場沒有附加任何事件,當它被更新的變化事件觸發。我們知道,改變事件不會發生,直到領域失去焦點,但我們不理解這種行爲。

任何幫助或澄清將是apreciated。

在此先感謝。

對不起,我的意思是改變而不是改變()。

+2

您需要爲委託事件處理函數提供函數的*引用*,而不是函數的*返回值*:'$(document).on('change','.myClass',changed)'。還要注意,無論如何你的邏輯是沒有意義的,因爲以編程方式改變一個元素的值並不會引發'change'事件,參見:https://jsfiddle.net/2185v3z5/ –

+0

我在你的例子中看到你是對的,但是事件的發生在我的代碼中發生,所以我必須假設我有一個我從未見過的問題。非常感謝你的幫助。 – MKP

回答

1

變化頂線從

$(document).on("change", ".myClass", changed()); 

$(document).on("change", ".myClass", changed); 

您所呼叫的方法changed()並提供從changed()方法的返回值。

1

帶括號的函數名稱,如changed()立即調用該函數。這意味着第三個參數確實傳遞了您的changed函數的返回值。你應該改變行:

$(document).on("change", ".myClass", changed); 

現在,當事件發生時你changed功能纔會啓用。