我正在使用偶尔会更改输入字段值的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()
的调用。)
答案 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();
}
});
}