在使用 jquery 时.change
,input
只有在输入失去焦点时才会触发事件
就我而言,我需要在输入值更改后立即调用服务(检查值是否有效)。我怎么能做到这一点?
在使用 jquery 时.change
,input
只有在输入失去焦点时才会触发事件
就我而言,我需要在输入值更改后立即调用服务(检查值是否有效)。我怎么能做到这一点?
更新以进行说明和示例
示例:http : //jsfiddle.net/pxfunc/5kpeJ/
方法一、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
事件
对于较旧的浏览器,使用该keyup
事件(一旦键盘上的一个键被释放,这将触发,该事件可能会产生一种误报,因为当“w”被释放时,输入值被更改并且keyup
事件被触发,而且当“shift”键被释放,keyup
事件触发但没有对输入进行任何更改。)。如果用户右键单击并从上下文菜单中粘贴此方法也不会触发:
$('#someInput').keyup(function() {
$(this).val() // get the current value of the input field.
});
方法 3. 定时器(setInterval
或setTimeout
)
为了绕过限制,keyup
您可以设置一个计时器来定期检查输入的值以确定值的变化。您可以使用setInterval
或setTimeout
来执行此计时器检查。请参阅此 SO 问题的标记答案:jQuery textbox change event或查看使用focus
和blur
事件来启动和停止特定输入字段的计时器的工作示例的小提琴
如果你有 HTML5:
oninput
(仅在实际发生更改时触发,但会立即执行)否则,您需要检查所有这些可能表明输入元素值发生更改的事件:
onchange
onkeyup
(不是 keydown
或keypress
因为输入的值中还没有新的击键)onpaste
(支持时)有可能:
onmouseup
(我不确定这个)使用 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/)。
// 当元素失去焦点时触发 .blur
$('#target').blur(function() {
alert($(this).val());
});
// 要手动触发,请使用:
$('#target').blur();