仅捕获改变input的按键?

当按键更改文本框的input时,我想要做某些事情。 我认为keypress事件对于这一点来说是最好的,但我怎么知道它是否导致了一个变化? 我需要过滤出像按箭头键或修饰符的东西…我不认为所有的值硬编码是最好的办法。

那我该怎么做呢?

在大多数浏览器中,可以对文本types的<input>元素使用HTML5 input事件:

 $("#testbox").on("input", function() { alert("Value changed!"); }); 

这在IE <9中不起作用,但有一个解决方法: propertychange事件。

 $("#testbox").on("propertychange", function(e) { if (e.originalEvent.propertyName == "value") { alert("Value changed!"); } }); 

IE 9同时支持,所以在那个浏览器中,最好select基于标准的input事件。 这个方便地先开火,所以我们可以在第一次input触发propertychange的处理程序。

把它放在一起( jsFiddle ):

 var propertyChangeUnbound = false; $("#testbox").on("propertychange", function(e) { if (e.originalEvent.propertyName == "value") { alert("Value changed!"); } }); $("#testbox").on("input", function() { if (!propertyChangeUnbound) { $("#testbox").unbind("propertychange"); propertyChangeUnbound = true; } alert("Value changed!"); }); 

.change()就是你要的

 $("#testbox").keyup(function() { $(this).blur(); $(this).focus(); $(this).val($(this).val()); // fix for IE putting cursor at beginning of input on focus }).change(function() { alert("change fired"); }); 

这是我将如何做到这一点: http : //jsfiddle.net/JesseAldridge/Pggpt/1/

 $('#input1').keyup(function(){ if($('#input1').val() != $('#input1').attr('prev_val')) $('#input2').val('change') else $('#input2').val('no change') $('#input1').attr('prev_val', $('#input1').val()) }) 

我想出了这个自动保存textarea。 它使用.keyUp() jQuery方法的组合来查看内容是否已经改变。 然后我每5秒更新一次,因为我不希望每次更改表单时提交表单!

 var savePost = false; jQuery(document).ready(function() { setInterval('autoSave()', 5000) $('input, textarea').keyup(function(){ if (!savePost) { savePost = true; } }) }) function autoSave() { if (savePost) { savePost = false; $('#post_submit, #task_submit').click(); } } 

我知道即使内容没有改变,它也会启动,但是硬编码哪个键我不想让它工作。