提问人:Banshee 提问时间:6/24/2011 最后编辑:mikemaccanaBanshee 更新时间:4/28/2017 访问量:605979
检测jQuery中的输入更改?
Detecting input change in jQuery?
问:
在 上使用 jquery 时,只有在输入失去焦点时才会触发事件.change
input
就我而言,我需要在更改输入值后立即调用服务(检查值是否有效)。我怎样才能做到这一点?
答:
有一些 jQuery 事件,如 keyup 和 keypress,您可以将其与输入 HTML 元素一起使用。 您还可以使用 blur() 事件。
评论
keypress
当元素失去焦点时触发 .blur
$('#target').blur(function() {
alert($(this).val());
});
要手动触发,请使用:
$('#target').blur();
评论
如果您希望在元素中发生更改时触发事件,则可以使用 keyup 事件。
评论
onchange
keydown
已更新以进行说明和示例
示例:http://jsfiddle.net/pxfunc/5kpeJ/
方法 1.input
事件
在现代浏览器中,使用 input
事件。当用户在文本字段中键入、粘贴、撤消时,基本上只要值从一个值更改为另一个值,就会触发此事件。
在jQuery中,像这样做
$('#someInput').bind('input', function() {
$(this).val() // get the current value of the input field.
});
从 jQuery 1.7 开始,替换为 :bind
on
$('#someInput').on('input', function() {
$(this).val() // get the current value of the input field.
});
方法 2.KeyUp
事件
对于较旧的浏览器,使用该事件(一旦释放键盘上的键,就会触发该事件,此事件可能会给出一种误报,因为当释放“w”时,输入值会更改并触发事件,但当释放“shift”键时,事件会触发,但尚未对输入进行任何更改。此外,如果用户右键单击并从上下文菜单中粘贴,则不会触发此方法:keyup
keyup
keyup
$('#someInput').keyup(function() {
$(this).val() // get the current value of the input field.
});
方法 3.计时器(setInterval
或 setTimeout
)
为了绕过限制,您可以设置一个计时器来定期检查输入的值以确定值的变化。您可以使用或执行此计时器检查。请参阅此 SO 问题的标记答案:jQuery 文本框更改事件或查看小提琴以获取工作示例,使用 和 事件来启动和停止特定输入字段的计时器keyup
setInterval
setTimeout
focus
blur
评论
innerText
value
如果您使用的是 HTML5:
oninput
(仅在实际发生更改时触发,但会立即触发)
否则,您需要检查所有这些事件,这些事件可能指示输入元素的值发生了更改:
onchange
onkeyup
(不是,或者因为输入的值还没有新的击键)keydown
keypress
onpaste
(支持时)
也许:
onmouseup
(我不确定这个)
评论
这涵盖了使用 jQuery 1.7 及更高版本对输入的所有更改:
$(".inputElement").on("input", null, null, callbackFunction);
使用 HTML5 且不使用 jQuery,您可以使用 input
事件:
var input = document.querySelector('input');
input.addEventListener('input', function()
{
console.log('input changed to: ', input.value);
});
每次输入的文本更改时,都会触发此操作。
在 IE9+ 和其他浏览器中受支持。
在这里的 jsFiddle 中实时尝试一下。
评论
正如其他人已经建议的那样,您的解决方案是嗅探多个事件。
执行此工作的插件通常会侦听以下事件:
$input.on('change keydown keypress keyup mousedown click mouseup', handler);
如果您认为它可能合适,也可以添加 和其他事件。
我建议不要超过要侦听的事件,因为它在浏览器内存中加载了进一步的程序,以根据用户的行为执行。focus
blur
注意:请注意,使用 JavaScript 更改输入元素的值(例如通过 jQuery .val(
) 方法)不会触发上述任何事件。
(参考:https://api.jquery.com/change/)。
评论
.val()
$('#element').val(whatever).change()
评论