使用JQuery检测对<输入类型=“text”>的所有更改(立即)

2022-08-29 23:22:38

有许多方法可以更改 的值,包括:<input type="text">

  • 按键
  • 复制/粘贴
  • 用 JavaScript 修改
  • 由浏览器或工具栏自动完成

我希望我的JavaScript函数在任何时候更改时都被调用(使用当前输入值)。我希望它能立即被调用,而不仅仅是在输入失去焦点时。

我正在寻找最干净,最健壮的方法在所有浏览器中执行此操作(最好使用jQuery)。


答案 1

此 jQuery 代码用于捕获对任何元素的即时更改,并且应该适用于所有浏览器:.bind()

 $('.myElements').each(function() {
   var elem = $(this);

   // Save current value of element
   elem.data('oldVal', elem.val());

   // Look for changes in the value
   elem.bind("propertychange change click keyup input paste", function(event){
      // If value has changed...
      if (elem.data('oldVal') != elem.val()) {
       // Updated stored value
       elem.data('oldVal', elem.val());
    
       // Do action
       ....
     }
   });
 });

但是,请注意,在 jQuery 版本 3.0 中已弃用。任何使用jQuery版本1.7或更高版本的人都应该改用。.bind().on()


答案 2

jQuery 的实时解决方案 >= 1.7 已打开

$("#input-id").on("change keyup paste", function(){
    dosomething();
})

如果您还想检测“点击”事件,只需:

$("#input-id").on("change keyup paste click", function(){
    dosomething();
})

如果您使用的是jQuery <= 1.6,只需使用bindlive而不是。on