24

如何检测隐藏输入值的变化?我已经尝试过这些方法但没有成功:

$('#id_inpout').live('change',function () {
        var id_el = $(this).attr('id');
        alert(id_el);
    });

$('#id_inpout').change(function () {
        var id_el = $(this).attr('id');
        alert(id_el);
    });

$('#id_inpout').bind('change',function () {
        var id_el = $(this).attr('id');
        alert(id_el);
    });
4

2 回答 2

72

您也可以trigger('change')在为隐藏输入分配新值后使用:

$('#hidden_input').val('new_value').trigger('change');
于 2013-02-12T14:33:08.197 回答
27

正如在重复中所说的那样,正如您所看到的,在 javascript 中所做的更改不会触发change事件。

因为我在重复项中没有找到可接受的答案(即答案不涉及更改隐藏值的设置方式),并且假设您确实需要它(也就是说,当您更改隐藏值时,您无法调用您的函数输入 val),这就是你可以做的:

function survey(selector, callback) {
   var input = $(selector);
   var oldvalue = input.val();
   setInterval(function(){
      if (input.val()!=oldvalue){
          oldvalue = input.val();
          callback();
      }
   }, 100);
}
survey('#id_inpout', function(){console.log('changed')}); 

但我最好使用更直接的解决方案(即在更改隐藏输入值时调用函数)。这个函数可能是你自己的一个简单的事件调度器(基本上是一个对象,它包装了一个函数列表,当它被调用时要调用它)。

编辑:现在是 2015 年,对于想知道的人来说,不,网络世界的最新进展都没有解决这个问题。变异观察者不观察输入的 value 属性(它不是真正的 DOM),ES6 对象观察者对那些原生对象也无能为力。

于 2012-09-25T10:18:17.587 回答