如何检测用户所做的更改和程序化更改之间的差异
How to detect the difference between a change made by a user and a change made programmatically?
我有一个onChange事件处理程序,它被触发了两次;一次用于由用户进行的更改,第二次用于由原始用户的更改以编程方式进行的更改。对于前者,事件只应触发一次。你如何区分用户做出的更改和脚本做出的更改?
如果您只是用el.value = x
更改值,则不会触发change
事件。例如,这不会将任何内容记录到控制台:
var el = document.getElementById('el')
el.onchange = function(){
console.log('changed');
};
el.value = 'asasassasa';
所以,如果你看到它被触发了两次,要么是因为:
- 您正在使用
el.onchange()
手动触发它。在这种情况下,只需删除this调用
或者:
- 事件处理程序多次绑定到元素。你必须找到发生这种情况的地方
捕捉此类问题并有时解决这些问题的一个好方法是始终在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
}
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- java.net和javascript之间正则表达式的差异
- JavaScript中的函数和对象之间没有区别吗?
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Jquery在函数之间传递表行
- 根据某些条件在视图之间切换
- 在控制器和数据对象之间同步数据
- d3中堆栈函数和嵌套函数之间的差异
- JQuery:在页面之间滑动
- 如何使用JavaScript查找1和N之间的所有数字的总和
- 操作放置在画布上的元素之间的连接
- 在下划线中使用_(obj).map(callback)和_.map(obj,callback)之间的区别
- jquery在表单之间切换
- Nodejs API控制器,用于在API之间切换
- 如何在aspx页面之间传递参数
- 在索引.html和应用.js [node.js] 之间共享变量
- 什么是&&在没有if的行中的变量之间
- DOM元素和angular元素之间的主要区别是什么
- 如何检测用户所做的更改和程序化更改之间的差异