2011-01-13 57 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耗时,但使用时要小心它可能也非常有效...