Javascript 仅捕获更改输入的按键?
当按键改变文本框的输入时,我想做些什么。我认为Javascript 仅捕获更改输入的按键?,javascript,jquery,Javascript,Jquery,当按键改变文本框的输入时,我想做些什么。我认为keypress事件最适合这样做,但我如何知道它是否引起了变化?我需要过滤掉像按箭头键或修改器之类的东西。。。我不认为硬编码所有的值是最好的方法 那我该怎么做呢?就是你想要的 $("#testbox").keyup(function() { $(this).blur(); $(this).focus(); $(this).val($(this).val()); // fix for IE putting cursor at beg
keypress
事件最适合这样做,但我如何知道它是否引起了变化?我需要过滤掉像按箭头键或修改器之类的东西。。。我不认为硬编码所有的值是最好的方法
那我该怎么做呢?就是你想要的
$("#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");
});
我为自动保存文本区域想出了这个。它结合使用
.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();
}
}
我知道即使内容没有更改,它也会启动,但硬编码我不想使用的键更容易。我会这样做:
在大多数浏览器中,可以对文本类型
元素使用HTML5输入
事件:
$("#testbox").on("input", function() {
alert("Value changed!");
});
这在IE<9中不起作用,但有一个解决方法:propertychange
事件
$("#testbox").on("propertychange", function(e) {
if (e.originalEvent.propertyName == "value") {
alert("Value changed!");
}
});
IE9同时支持这两种功能,因此在该浏览器中,最好选择基于标准的input
事件。这可以方便地首先触发,因此我们可以在第一次触发input
时删除propertychange
的处理程序
把它们放在一起():
.change()
在文本框失去焦点之前不会触发。听起来他想在按键时得到通知。他可能可以通过添加一个执行blur()/focus()@spb的按键事件来解决这个问题:查看我的JSFIDLE,上面显示了一个我提到的解决方法的示例,效果很好。你应该把这个JSFIDLE移到你的答案中。哪个版本的IE?我使用IE9开发工具在IE7、IE8和IE9中测试了小提琴。应该使用.data
而不是.attr
,但我认为这种方法也很好。你可以通过将所有$(“#input1”)更改为$(this)(在事件处理程序中)@Jason:也可以这样做。我也在想同样的事情。如果在文本框内按住字母键,然后单击外部,也可以绕过keyup事件。不太可能……但这仍然是一个需要警惕的事件。需要与相结合。我认为更改
具有健壮性。此外,与长时间按键输入的每个字母相比,这不会触发每个字母,仅在末尾触发一次。这对我来说很好,但是…有点遗憾,我认为我们对此无能为力。@标记-如果使用鼠标进行剪切、粘贴、删除或删除,也可以绕过所有关键事件。(虽然您已经提到了与更改事件相结合,所以您应该可以。)此外,您还提到了按住键时,keyup
不会为每个字母触发,但keypress
应该。呃……我并不是这么问的。我不想建立一个自动保存功能,所以这对我来说根本不起作用。酷!我不知道这些事情。不过,我还是希望支持较旧的浏览器:(@Mark:For text
s,你在这方面几乎什么都可以:Safari 3+、全Chrome、Firefox 2+、IE 6+(甚至可能是5+)、Opera,比如9+。对于textarea,支持还不太好。@Mark:顺便说一句,这是@Andy E(),他回答了几个相关的问题,并在博客上发表了相关文章:以及“输入”事件在很久以前就得到了支持??为什么没有更多的人知道这一点?这太疯狂了。@henrywright:我想使用contenteditable?最近的Mozilla和WebKit在contenteditable元素上有input
事件。IE没有。我想Opera现在使用WebKit可能会更好。另请参阅
$("#testbox").on("propertychange", function(e) {
if (e.originalEvent.propertyName == "value") {
alert("Value changed!");
}
});
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!");
});