2012-02-14 61 views
0

为了检测文本框中的变化,我必须在IE中使用“onpropertychange”(其他人使用“oninput”) “onpropertychange”的行为与“oninput”非常相似,但它也会触发非用户行为。 是那里找到阉了 “onpropertychange” 的方式是通过用户操作(如下所示)onpropertychange检测用户操作

  • 键盘输入
  • 削减
  • triggerd删除
  • 从下拉tipbox选择

回答

2

不需要。您最好的选择是使用包装函数来更改文本框的值。

[编辑:可以在IE 8及以上版本中使用getter和setter来完成。见@ AndyE的评论]

现场演示(仅适用于IE):http://jsfiddle.net/4C6KL/

代码:

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; 
} 
+2

+1,但在IE 8和9,你可以代理为'属性描述HTMLInputElement#值'和'HTMLElement.setAttribute',它可以涵盖任何情况,其中元素的值被脚本改变,除了重置之外,也许。尽管如此,对IE 7和更低版本没有帮助。编辑:[使用你的小提琴非常基本的例子](http://jsfiddle.net/AndyE/4C6KL/1/)(仅限IE8/9)。 – 2012-02-14 12:07:44

+1

@安迪:好点。我忘记IE 8支持。当然,IE 9有“输入”事件。 – 2012-02-14 12:29:05

+0

包装成本太高,因为ie 6&7,我会检查srcElement是否有焦点。 – 2012-02-15 01:53:33