Javascript onpropertychange检测用户操作

Javascript onpropertychange检测用户操作,javascript,internet-explorer,dom,Javascript,Internet Explorer,Dom,要检测文本框中的更改,我必须在IE中使用“onpropertychange”(“其他人使用oninput”) “onpropertychange”的行为非常类似于“oninput”,但它也是由非用户行为触发的。 是否有办法确定“onpropertychange”是否由用户操作触发(如下所列) 键盘输入 削减 删除 粘贴 从下拉列表tipbox中选择 否。最好使用包装器函数更改文本框的值 [编辑:在IE8及以上版本中,可以使用getter和setter进行编辑。请参阅@AndyE的评论] 现场演

要检测文本框中的更改,我必须在IE中使用“onpropertychange”(“其他人使用oninput”) “onpropertychange”的行为非常类似于“oninput”,但它也是由非用户行为触发的。 是否有办法确定“onpropertychange”是否由用户操作触发(如下所列)

  • 键盘输入
  • 削减
  • 删除
  • 粘贴
  • 从下拉列表tipbox中选择

否。最好使用包装器函数更改文本框的值

[编辑:在IE8及以上版本中,可以使用getter和setter进行编辑。请参阅@AndyE的评论]

现场演示(仅限IE):

代码:


+1,尽管在IE 8和9中,您可以代理
HTMLInputElement#value
HTMLElement.setAttribute
的属性描述符,这将覆盖除重置之外,脚本更改元素值的任何情况。但对IE 7及更低版本没有帮助。编辑:(仅限IE8/9)。@AndyE:说得好。我忘了IE8支持这一点。当然,IE9有
input
事件。包装成本太高了,对于IE6和IE7,我将只检查src元素是否有焦点。
var textBox = document.getElementById("foo");
var changingValue = false;

textBox.onpropertychange = function() {
    if (window.event.propertyName == "value" && !changingValue) {
        // Do stuff here
    }
};

function setTextBoxValue(val) {
    changingValue = true;
    textBox.value = val;
    changingValue = false;
}