正在检测 jQuery 中的输入更改?

2022-08-29 23:38:25

在某个事件上使用 jquery 时,仅当输入失去焦点时才会触发.changeinput

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


答案 1

已更新以进行澄清和示例

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

方法 1.输入事件

在现代浏览器中,使用输入事件。当用户在文本字段中键入内容、粘贴、撤消(基本上只要值从一个值更改为另一个值),就会触发此事件。

在jQuery中,像这样做

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

从 jQuery 1.7 开始,替换为 :bindon

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

方法2。键控事件

对于较旧的浏览器,请使用该事件(一旦释放键盘上的键,这将触发,此事件可能会给出一种误报,因为当释放“w”时,输入值会更改并且事件会触发,但是当释放“shift”键时,事件也会触发,但对输入没有进行任何更改。此外,如果用户右键单击并从上下文菜单中粘贴,则不会触发此方法:keyupkeyupkeyup

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

方法3.定时器(setIntervalsetTimeout

要绕过的限制,您可以设置一个计时器来定期检查输入的值以确定值的变化。您可以使用 或 执行此计时器检查。请参阅此SO问题的标记答案:jQuery文本框更改事件,或查看小提琴以获取使用和事件来启动和停止特定输入字段的计时器的工作示例keyupsetIntervalsetTimeoutfocusblur


答案 2

如果你有 HTML5:

  • oninput(仅当实际发生更改时才触发,但会立即触发)

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

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

也许:

  • onmouseup(我不确定这个)