仅捕获改变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(); } }
我知道即使内容没有改变,它也会启动,但是硬编码哪个键我不想让它工作。