在點擊元素聚焦之前,模糊元素上的更改事件觸發是很自然的。如果你不想使用一個超時(如在Dan提出的那樣,「在輸入被改變之前做一些事情X ms,除非在一個按鈕被點擊之間)」,並且超時是醜陋的 - 你只能執行兩次這些操作。輸入更改後,保存其狀態並執行一些操作。如果然後 - 稍後 - 點擊該按鈕,檢索保存的狀態並執行類似的操作。我想這是你的UI行爲實際需要的,並不是所有的用戶都是那麼快。如果有人離開輸入(例如通過按Tab
),然後稍後激活按鈕「獨立」,你是否真的想執行這兩個操作?
var inputval = null, changedval = null;
$('form input').on('change', function(e) {
inputval = this.value;
// do some things with it and save them to
changedval = …
// you might use the value property of the input itself
));
$('#foo').on('click', function(e) {
// do something with inputval
});
$('form …').on('any other action') {
// you might want to invalidate the cache:
inputval = changedval;
// so that from now on a click operates with the new value
});
我同意,點擊不應觸發相同元素的變化。 – charlietfl
@charlietfl:確實如此。如果你點擊其他地方,焦點改變,並且當一個輸入元素模糊時,'change'可能會觸發 – Bergi
@bergi,但是對於被點擊的相同輸入實際上不應該是一個改變,這是我的觀點。是前一個輸入焦點的變化 – charlietfl