日期:2014-05-16  浏览次数:20347 次

js动态修改input的value,会阻碍onchange事件?
大家好,请看如下html,执行后,发现input的onchange事件未响应,原因是我在onpropertychange中,修改了input的value,修改value为何会影响到onchange?如何才能避免?求解,谢谢!
HTML code

<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>



------解决方案--------------------
ie会内存溢出。。
onchange和blur差不多,不过是要内容不一样时才会调用onchange
onpropertychange是只要内容改变就触发,设置控件内容回导致循环调用onpropertychange导致内存溢出stack overflow at line 0
------解决方案--------------------
JScript code

<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>

------解决方案--------------------
探讨
JScript code

<html>
<head></head>
<body>
<input onpropertychange="testPropertyChange(this)" onchange="testChange()" />
</body>
</html>
<script type="text/javascript">
function ……