检测 jQuery 中的输入变化?

IT技术 javascript jquery html
2021-01-17 20:09:58

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

就我而言,我需要在输入值更改后立即调用服务(检查值是否有效)。我怎么能做到这一点?

6个回答

更新以进行说明和示例

示例: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 开始,替换bindon

$('#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. 定时器(setIntervalsetTimeout

为了绕过限制,keyup您可以设置一个计时器来定期检查输入的值以确定值的变化。您可以使用setIntervalsetTimeout来执行此计时器检查。请参阅此 SO 问题的标记答案:jQuery textbox change event或查看使用focusblur事件来启动和停止特定输入字段的计时器的工作示例的小提琴

输入事件?jQuery 中没有输入事件(还)... stackoverflow.com/q/11189136/104380
2021-03-10 20:09:58
@AdiDarachi MutationObserver 将跟踪 DOM 元素的变化。但是,用户更改输入字段中的数据不会触发 MutationObserver 更改...我设置了一个测试用例,只有对innerTextorvalue属性(模拟用户输入)的 JS 代码更改才会触发 MutationObserver 事件jsfiddle.net/pxfunc/ 04chgpws/1(有关 MutationObserver 事件日志记录,请参阅 console.log)。你有不同的测试用例我可以看看吗?
2021-03-16 20:09:58
你能解释更多关于这个解决方案的信息吗?我如何获得当前值?我如何让它仅在对当前值进行更改时运行?
2021-03-17 20:09:58
2021-03-28 20:09:58
对于方法 2,我通常同时绑定 keyupchange。这样,在没有按键(如粘贴)的情况下发生输入的情况下,它至少会在输入失去焦点时触发事件。
2021-03-30 20:09:58

如果你有 HTML5:

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

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

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

有可能:

  • onmouseup (我不确定这个)
@naomik 来自我的测试,它适用于复选框输入;除了 IE/Edge。可能会出现一些其他异常,但对这些输入类型使用 onchange 更明智(恕我直言)。
2021-03-31 20:09:58

使用 HTML5 而不使用 jQuery,您可以使用input事件

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

input.addEventListener('input', function()
{
    console.log('input changed to: ', input.value);
});

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

支持 IE9+ 和其他浏览器。

jsFiddle 中尝试一下

'change' 只在模糊时触发,而不是在文本改变时触发。使用 'input' 事件来检测文本更改。
2021-03-12 20:09:58

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

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

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

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

就像一个温和的补充,要从 jQuery 触发事件,您可以在.val()例如输入字段上的更改事件之后调用相应的操作,您可以执行以下操作... $('#element').val(whatever).change()
2021-03-10 20:09:58
我知道了。我搜索了一下,似乎只有 IE 支持 focusout,Chrome 也部分支持,对吗?
2021-03-21 20:09:58
我还建议添加焦点以避免自动完成问题
2021-03-25 20:09:58

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

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

// 要手动触发,请使用:

$('#target').blur();
.change 就像我说的,只有在 inout 失去焦点并且值改变时才会抛出,我需要在 input(text) 更改后立即获得一个偶数(只要输入中的文本更改)。模糊只会在输入失去焦点时触发。
2021-03-16 20:09:58