2011-01-13 104 views
2

我有一個文本類型的輸入字段和一個複選框。 如果我更改文本,然後在輸入框外單擊(或按Enter或Tab),則會引發更改事件。但是如果我輸入一些文本,然後用鼠標直接點擊複選框,則只有複選框更改事件似乎被拋出。JavaScript文本輸入更改事件未觸發

我有以下代碼:

<input type="text" name="text" class="update"> 
<input type="checkbox" name="check" class="update"> 

與這個jQuery:

$('.update').change(function(){ 
    console.log($(this)); 
}); 

這是一個已知的問題,以及如何確保所有變更事件被觸發/拋出/陷於這個設置?

+0

是$(document).ready(function())中的代碼;功能?您可以嘗試在函數中添加alert()以查看您是否正在執行此功能。 – codersarepeople 2011-01-13 21:55:45

回答

1

我不知道如果我得到它。但是對於我來說,當我嘗試鍵入文本框,然後單擊鼠標複選框時,這兩個事件都會被觸發。但是你必須記住,文字輸入的事件「改變」意味着這個輸入必須放鬆焦點,只要字段被聚焦,任何改變事件都不會被觸發。這不知何故可能是你的情況。複選框/射頻盒以不同的方式工作。不需要放鬆焦點。

乾杯。

P.S. 我的測試用例: http://dl.dropbox.com/u/196245/index16.html

1

由於您正在偵聽更新類,因此更改事件觸發。

1

改變事件將不會開火,除非輸入焦點切換到其他控件

0

要發射用戶變化,使用輸入事件:

$('input').on('input',function(){...}) 

要發射代碼更改,請使用DOMSubtreeModified事件:

$('input').bind('DOMSubtreeModified',function(){...}) 

如果你想火用戶和代碼更改:

$('input').bind('input DOMSubtreeModified',function(){...}) 

的DOMSubtreeModified事件被標記爲過時,有時是相當的CPU耗時,但使用時要小心它可能也非常有效...