我想知道输入元素是否已更改,因此了解到可以在IE中收听onpropertychange
,在其他浏览器中收听oninput
。
这是我的代码:
var _addChangedProperty = function(input){
input.changed = false;
var oninput = function(){
this.changed = !!this.value;
if(this.changed){
this.style.color = "black";
}
};
input.onpropertychange = input.oninput = oninput;
};
现在,我想将
input.onpropertychange = input.oninput = oninput;
更改为addEventListerner
和attachEvent
,我需要检查是否支持onpropertychange
事件,如何做到这一点(没有浏览器检测到)? 最佳答案
您可以使用in
运算符进行检查:
"onpropertychange" in input
这种功能测试在Firefox的较早版本中不起作用,该版本针对与确实存在的事件相对应的事件处理程序属性报告
false
事件,但这在这里不是问题,因为Firefox当前不支持propertychange
事件,并且将来不太可能。这里是一些背景:http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
另一点:您需要单独的函数来处理
propertychange
和input
事件,因为在propertychange
处理程序中,您需要检查value
属性是否已更改。否则,您最终将处理对输入的任何属性的更改。input.onpropertychange = function(evt) {
evt = evt || window.event;
if (evt.propertyName == "value") {
// Do stuff here
}
};