当对输入使用jquery .change时,只有当输入失去焦点时才会触发事件

在我的例子中,我需要在输入值更改后立即调用服务(检查值是否有效)。我怎么才能做到呢?


当前回答

正如其他人已经建议的那样,在您的情况下,解决方案是嗅探多个事件。 执行这项工作的插件经常监听以下事件:

$input.on('change keydown keypress keyup mousedown click mouseup', handler);

如果你觉得合适,你也可以添加焦点、模糊和其他事件。 我建议不要在事件中进行监听,因为它会根据用户的行为在浏览器内存中加载进一步的程序来执行。

注意:使用JavaScript改变输入元素的值(例如通过jQuery .val()方法)不会触发上述任何事件。 (参考:https://api.jquery.com/change/)。

其他回答

有jQuery事件,如keyup和keypress,你可以使用输入HTML元素。 您还可以使用blur()事件。

// .blur在元素失去焦点时触发

$('#target').blur(function() {
  alert($(this).val());
});

//触发手动使用:

$('#target').blur();

如果你想要在元素发生变化时触发事件,那么你可以使用keyup事件。

UPDATED用于澄清和示例

示例:http://jsfiddle.net/pxfunc/5kpeJ/

方法1。输入事件

在现代浏览器中使用输入事件。当用户在文本框中输入,粘贴,撤销,基本上任何时候值从一个值改变到另一个值,这个事件都会触发。

在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文本框更改事件或查看小提琴工作示例,使用焦点和模糊事件来启动和停止特定输入字段的计时器

如果你有HTML5:

Oninput(仅在实际发生更改时触发,但立即执行)

否则,你需要检查所有这些事件,这些事件可能表明输入元素的值发生了变化:

onchange Onkeyup(不是keydown或keypress,因为输入的值还没有新的击键) Onpaste(支持时)

也许:

onmouseup(我不确定这个)