输入字段的值更改时会触发什么事件?

时间:2013-11-27 11:26:48

标签: javascript javascript-events jquery

我正在使用偶尔会更改输入字段值的JavaScript库。我想检测一下发生的时间。

显然,当输入字段的值发生变化时(或至少不在Chrome上),不会触发“更改”和“输入”事件。

为了验证这一点,我尝试了这个(使用JQuery):

<script>
    $(function() {
       $('#inp').on('change',function() { console.log('change event'); });
       $('#inp').on('input',function() { console.log('input event'); });
       $('#inp').val('hello');
    });
</script>
<input type="text" id="inp">

当我致电.val('hello')时,触发更改事件和输入事件。

如何检测更改? (请记住,更改值的代码不在我的控制之内,所以我无法在那里添加对trigger()的调用。)

1 个答案:

答案 0 :(得分:2)

有一个解决方法,你可以在定期间隔后汇集文本框的值,并在更改时触发事件。

<强> Live Demo

$('#elementId').change(function(){
   alert("changed");
});

var previousVal = "";
function InputChangeListener()
{
   if($('#elementId').val() != previousVal)
   {
     previousVal  = $('#elementId').val();
     $('#elementId').change();    
   }
}

setInterval(InputChangeListener, 500);

$('#elementId').val(3);
根据许多元素的评论

编辑

您可以使用数组和监视器,30元素不会成为性能问题

<强> Live Demo

$('.someclass').change(function(){
   alert("changed, id >> " + this.id);
});

var hashTablePrevElem=[];
$('.someclass').each(function(){
   hashTablePrevElem[this.id] = this.value; 
});

function InputChangeListener()
{    
    $('.someclass').each(function(){ 
      if(hashTablePrevElem[this.id] != this.value)
      {
       hashTablePrevElem[this.id]  = this.value;
       $(this).change();    
      }
    });
}