大家好,请看如下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>

解决方案 »

  1.   

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

  2.   


    <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. 没有值的变化!
      

  3.   

    此外, onproperptychange只适用于IE, 你要考虑浏览器的兼容性的话, 就不要用了