更改事件未在返回键上触发
我有一个带有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 ,则会触发更改事件。