隐藏输入改变事件

25

我如何检测隐藏输入框的值发生了改变?我已经尝试了以下方法但没有成功:

$('#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);
    });

6
重复?https://dev59.com/Bmw15IYBdhLWcg3wkMnz - max4ever
1
但是其他问题的答案都不可接受...即使被投票赞同的答案也需要显式调用触发。 - Denys Séguret
这个答案怎么样?https://dev59.com/SHNA5IYBdhLWcg3wVcT6 - palmplam
你正在更改什么,隐藏输入的id是什么??给我们看看VIEW。 - GautamD31
更改不是手动的,当它更改隐藏输入值时,我有自动完成输入,我无法恢复值。 - chokrijobs
显示剩余2条评论
2个回答

73

在将新值分配给隐藏输入后,您还可以使用trigger('change')

$('#hidden_input').val('new_value').trigger('change');

1
+1 太棒了!正是我所需要的。现在为什么我没想到呢? - GreatSeaSpider
9
你也可以使用 $('#hidden_input').val('new_value').change(); 这段代码来改变隐藏输入框的值,并触发其 change 事件。 - Mudaser Ali

27

正如其他重复问题所述,并且正如您所看到的,JavaScript中进行的更改不会触发 change 事件。

由于我在重复问题中找不到可接受的答案(即不涉及更改隐藏值设置方式的答案),并且假设您确实需要这样做(即在更改隐藏输入值时无法调用函数),则您可以执行以下操作:

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年,对于那些想知道的人,没有最近的Web世界进展会解决这个问题。变异观察者不会观察输入值的value属性(它不是真正的DOM),ES6对象观察程序也对这些原生对象无能为力。


谢谢大家,我会使用调查功能。 - chokrijobs
看起来使用Mutation Observer可以解决这个问题:https://dev59.com/Bmw15IYBdhLWcg3wkMnz#31719339 - Florian HENRY - Scopen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接