我有一个触发两次的onChange事件处理程序;一次是由用户进行的更改,另一次是由于原始用户的更改而以编程方式进行的更改。对于前者,事件应仅触发一次。如何识别用户所做的更改和脚本之间的更改?
答案 0 :(得分:0)
如果您只是使用el.value = x
更改值,则不会触发change
事件。例如,won't log anything to the console:
var el = document.getElementById('el')
el.onchange = function(){
console.log('changed');
};
el.value = 'asasassasa';
所以,如果你看到它被触发两次,那要么是因为:
el.onchange()
手动触发它。在这种情况下,只需删除此调用。或者:
答案 1 :(得分:0)
捕获此类问题并有时解决这些问题的一个好方法是始终使用onchange处理程序中的当前值检查旧值。
function onChange_handler(e){
if(this.old_value==this.value){
return; // no change detected - check why was it called twice.
}
this.old_value=this.value;
// the real change handling code
}