更改事件未在返回键上触发

我有一个带有jquery更改事件的文本框。

$('#txtAccountNo').change(function(){ $('label[for="txtAccountNo"]').append('loading...') }); 

当文本框失去焦点时,即用户使用鼠标单击或使用Tab键时,事件将起作用。 但是当按下返回键时,不会触发事件。 有人可以帮我解决这个问题吗?

这是change事件的标准行为。 如果要捕获每个Enter按,则需要使用keypress事件:

 $('#txtAccountNo').on('change keypress', function(e) { if (e.type == 'change' || (e.type == 'keypress' && e.which == 13)) { $('label[for="txtAccountNo"]').append('loading...') } }); 

正如您所强调的那样,仅当文本输入失去焦点时才会触发change事件。 你应该绑定到keyup

 $('#txtAccountNo').on('keyup', function() { $('label[for="txtAccountNo"]').append('loading...') }); 

作为上述的后脚本,维护change事件可能是一个明智的想法,因为当有人将文本粘贴到文本框中时,您可能还希望运行该function。 你可以通过使用:

 $('#txtAccountNo').on('keyup change', function() { ... }); 

实际上在现代浏览器和jQuery(似乎在问题中使用)高于1.7,返回按钮将提交更改而不需要失去焦点,代码应该工作。

  $("input").change( function() { $("output").val( $("input").val() ); }) 

看看这里的简单测试: http : //jsfiddle.net/4vBSm/2/

尽管如此,这在IE 9中并不会发生。 (并且jQuery不会解决这个问题http://bugs.jquery.com/ticket/11556 )

正如Matthew的回答所述,问题出现在IE9及更早版本中,但在现代浏览器中则不然。 我建议下面的解决方案,它只是将此function添加到所有浏览器:

 $('input[type=text]').on('keypress', function (e) { var $input = $(this); if (e.which == 13) { // Enter was hit $input.trigger('change'); } }); 

它会侦听文本输入上的按键,如果触发了Enter ,则会触发更改事件。