如何检测用户所做更改与以编程方式进行的更改之间的差异?

时间:2013-07-31 14:03:52

标签: javascript triggers onchange

我有一个触发两次的onChange事件处理程序;一次是由用户进行的更改,另一次是由于原始用户的更改而以编程方式进行的更改。对于前者,事件应仅触发一次。如何识别用户所做的更改和脚本之间的更改?

2 个答案:

答案 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
}