JQuery:检测input字段中的变化

可能重复:
jquery:如何检测文本框的内容已经改变

我想要检测用户的键盘动作何时改变文本字段的值。 它应该在现代浏览器中一致工作。

.keypress事件的JQuery页面显示它不一致? 另外,它不适用于退格,删除等。

我不能使用.keydown,因为它反应了shift,alt和方向键等等。另外,当用户按住一个键并插入多个字符时,它不会多次触发。

有没有一个简洁的方法我错过了? 还是应该使用.keydown并过滤掉由箭头键触发的事件,轮class等? 我主要担心的是会有我不知道应该被过滤的键。 (我几乎忘了ALT和CTRL,我想可能有其他人)但是,那么我将如何检测按住键并插入多个字符?

作为奖励,它会检测粘贴(包括右键单击)的变化,但我从这里有解决scheme。

您可以将“input”事件绑定到文本框。 这会在每次input改变时触发,所以当你粘贴一些东西时(即使是右击),删除并input任何东西。

$('#myTextbox').on('input', function() { // do something }); 

如果您使用change处理程序,则只会在用户取消selectinput框之后触发,而这可能不是您想要的。

这里有一个例子: http : //jsfiddle.net/6bSX6/

我最近用下面的函数实现了同样的function。

我想在编辑时启用保存button。

  1. 更改事件是不可取的,因为只有在编辑之后,鼠标才会在点击SAVEbutton之前在页面的其他地方被点击。
  2. 按键不处理退格键,删除和粘贴选项。
  3. 按键处理包括选项卡,Shift键在内的所有内容。

因此,我写下面的函数结合按键,键入(用于退格,删除)和粘贴事件的文本字段。

希望它可以帮助你。

 function checkAnyFormFieldEdited() { /* * If any field is edited,then only it will enable Save button */ $(':text').keypress(function(e) { // text written enableSaveBtn(); }); $(':text').keyup(function(e) { if (e.keyCode == 8 || e.keyCode == 46) { //backspace and delete key enableSaveBtn(); } else { // rest ignore e.preventDefault(); } }); $(':text').bind('paste', function(e) { // text pasted enableSaveBtn(); }); $('select').change(function(e) { // select element changed enableSaveBtn(); }); $(':radio').change(function(e) { // radio changed enableSaveBtn(); }); $(':password').keypress(function(e) { // password written enableSaveBtn(); }); $(':password').bind('paste', function(e) { // password pasted enableSaveBtn(); }); } 

使用jQuery的更改事件

说明:将事件处理程序绑定到“更改”JavaScript事件,或在元素上触发该事件。

一个例子

 $("input[type='text']").change( function() { // your code }); 

.keypress.focus.blur.change事件只会在input发生变化时触发

你可以使用jQuery的change()函数

 $('input').change(function(){ //your codes }); 

有关如何在API页面上使用它的示例: http : //api.jquery.com/change/

使用$.on()将你select的事件绑定到input,不要使用像$.keydown()等快捷键,因为从jQuery 1.7开始, $.on()是附加事件处理程序的首选方法(请参见: http://api.jquery.com/on/和http://api.jquery.com/bind/ )。

$.keydown()只是$.bind('keydown')一个快捷方式, $.bind()$.on()replace的内容。

为了回答你的问题,据我所知,除非你需要在keydown特别keydown一个事件,否则change事件应该为你做窍门。

 $('element').on('change', function(){ console.log('change'); }); 

为了响应下面的评论,javascript change事件logging在这里: https : //developer.mozilla.org/en-US/docs/Web/Events/change

下面是使用jQuery处理input元素的change事件的一个工作示例: http : //jsfiddle.net/p1m4xh08/