大家好,请看如下html,执行后,发现input的onchange事件未响应,原因是我在onpropertychange中,修改了input的value,修改value为何会影响到onchange?如何才能避免?求解,谢谢!<html>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript"> function testChange() {
alert("changed");
} function testPropertyChange(input) {
input.value = "aa"; // 这段话如果改为alert("aa"),则结果两个事件都能响应
}</script>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript"> function testChange() {
alert("changed");
} function testPropertyChange(input) {
input.value = "aa"; // 这段话如果改为alert("aa"),则结果两个事件都能响应
}</script>
onchange和blur差不多,不过是要内容不一样时才会调用onchange
onpropertychange是只要内容改变就触发,设置控件内容回导致循环调用onpropertychange导致内存溢出stack overflow at line 0
<html>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript">
function testChange() {
alert("changed");
}
var i=1;
function testPropertyChange(input) {
alert("第"+(i++)+"次进入");
if(i==10)
return;
input.value = "aa"; // 这段话如果改为alert("aa"),则结果两个事件都能响应
}
</script>你把我改过的代码, 在IE里运行一次就明白了 —— 你原来的代码, 就是个死循环, 还执行什么onchange事件呀?input.value = "aa"; 就相当于又激发了一次 onprpertychange 事件。 所以你呀, 就不要想着在这个事件里给它直接赋值了, 如果你一定要赋值, 那是不可能再激发什么onchange因为onchange是焦点离开时才激发的。 而且是要有值的变化才行。 但你的onproperptychange事件里, 已把值指定死了, 还怎么变化?两个问题:
1. 死循环!
2. 没有值的变化!