0
为了检测文本框中的变化,我必须在IE中使用“onpropertychange”(其他人使用“oninput”) “onpropertychange”的行为与“oninput”非常相似,但它也会触发非用户行为。 是那里找到阉了 “onpropertychange” 的方式是通过用户操作(如下所示)onpropertychange检测用户操作
- 键盘输入
- 削减
- triggerd删除
- 贴
- 从下拉tipbox选择
为了检测文本框中的变化,我必须在IE中使用“onpropertychange”(其他人使用“oninput”) “onpropertychange”的行为与“oninput”非常相似,但它也会触发非用户行为。 是那里找到阉了 “onpropertychange” 的方式是通过用户操作(如下所示)onpropertychange检测用户操作
不需要。您最好的选择是使用包装函数来更改文本框的值。
[编辑:可以在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;
}
+1,但在IE 8和9,你可以代理为'属性描述HTMLInputElement#值'和'HTMLElement.setAttribute',它可以涵盖任何情况,其中元素的值被脚本改变,除了重置之外,也许。尽管如此,对IE 7和更低版本没有帮助。编辑:[使用你的小提琴非常基本的例子](http://jsfiddle.net/AndyE/4C6KL/1/)(仅限IE8/9)。 – 2012-02-14 12:07:44
@安迪:好点。我忘记IE 8支持。当然,IE 9有“输入”事件。 – 2012-02-14 12:29:05
包装成本太高,因为ie 6&7,我会检查srcElement是否有焦点。 – 2012-02-15 01:53:33