检测jQuery中的输入变化?

Ban*_*hee 351 html javascript jquery

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

在我的情况下,我需要在输入值改变后立即调用服务(检查值是否有效).我怎么能做到这一点?

Mik*_*keM 536

更新以获得澄清和示例

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

方法1. input事件

在现代浏览器中使用该input事件.当用户键入文本字段,粘贴,撤消时,基本上随时值从一个值更改为另一个值时,将触发此事件.

在jQuery中这样做

$('#someInput').bind('input', function() { 
    $(this).val() // get the current value of the input field.
});
Run Code Online (Sandbox Code Playgroud)

从jQuery 1.7开始,替换bindon:

$('#someInput').on('input', function() { 
    $(this).val() // get the current value of the input field.
});
Run Code Online (Sandbox Code Playgroud)

方法2. keyup事件

对于较旧的浏览器使用keyup事件(一旦键盘上的键被释放,这将触发,此事件可能会产生一种误报,因为当"w"被释放时,输入值被更改并且keyup事件触发,但是当"shift"键被释放,keyup事件触发,但输入没有变化.).如果用户右键单击并粘贴上下文菜单,则此方法也不会触发:

$('#someInput').keyup(function() {
    $(this).val() // get the current value of the input field.
});
Run Code Online (Sandbox Code Playgroud)

方法3.定时器(setIntervalsetTimeout)

为了解决keyup您的限制,可以设置计时器以定期检查输入的值以确定值的变化.您可以使用setIntervalsetTimeout执行此计时器检查.请参阅此SO问题上的标记答案:jQuery文本框更改事件或查看工作示例的小提琴使用focusblur事件来启动和停止特定输入字段的计时器

  • 输入事件在jQuery mobile中运行(已测试) (2认同)

Aln*_*tak 185

如果你有HTML5:

  • oninput (仅在实际发生更改时触发,但立即执行此操作)

否则,您需要检查所有这些可能表示输入元素值更改的事件:

  • onchange
  • onkeyup(没有 keydownkeypress因为输入的值不会有新的击键)
  • onpaste (支持时)

有可能:

  • onmouseup (我不确定这一个)


Dre*_*kes 81

使用HTML5并且不使用jQuery,您可以使用以下input事件:

var input = document.querySelector('input');

input.addEventListener('input', function()
{
    console.log('input changed to: ', input.value);
});
Run Code Online (Sandbox Code Playgroud)

每次输入文本更改时都会触发.

在IE9 +和其他浏览器中受支持.

这里尝试jsFiddle.


Ema*_*nde 12

正如其他人已经建议的那样,您的案例中的解决方案是嗅探多个事件.
执行此工作的插件通常会侦听以下事件:

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

如果你认为它可能适合,您可以添加focus,blur和其他活动了.
我建议不要超过要监听的事件,因为它会在浏览器内存中加载根据用户行为执行的进一步程序.

注意:请注意,使用JavaScript更改input元素的值(例如,通过jQuery .val()方法)不会触发上面的任何事件.
(参考: https: //api.jquery.com/change/).

  • 就像一个温和的补充,要从jQuery触发事件,您可以在.val()之后调用相应的动作,例如对于输入字段上的change事件,您可以执行以下操作... $('#element ').val(无论如何).change()` (4认同)