检测html选择框上的程序更改

5 html javascript events html-select

有没有办法让HTML select元素每次以编程方式更改其选择时调用一个函数?

当使用javascript修改选择框中的当前选择时,IE和FF都不会触发'onchange'.此外,js函数改变了选择是框架的一部分,所以我无法改变它以触发onchange(),例如.

这是一个例子:

<body>
<p>
<select id="sel1" onchange="myfunction();"><option value="v1">n1</option></select>
<input type="button" onclick="test();" value="Add an option and select it." />
</p>
<script type="text/javascript">
    var inc = 1;
    var sel = document.getElementById('sel1');
    function test() {
        inc++;
        var o = new Option('n'+inc, inc);
        sel.options[sel.options.length] = o;
        o.selected = true;
        sel.selectedIndex =  sel.options.length - 1;
    }

    function myfunction() {
        document.title += '[CHANGED]';
    }
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

有没有办法让test()调用myfunction()而不更改test()(或在按钮上添加事件)?

谢谢.

Chi*_*hii 4

如果您可以扩展/修改框架以在更改选择选项时提供钩子/回调,那就更好了(一种方法可能是使用js的动态功能来鸭子输入它?)。

如果做不到这一点,有一个低效的解决方案 - 轮询。您可以设置一个 setTimeout/setInteval 调用来轮询所需的选择选项 dom 元素,并在检测到某些内容发生更改时触发您自己的回调。

至于你问题的答案

有没有办法让 test() 调用 myfunction() 而不更改 test() (或在按钮上添加事件)?

是的,通过使用 jquery AOP http://plugins.jquery.com/project/AOP,它提供了一个简单的解决方案。

<body>
<p>
<select id="sel1" onchange="myfunction();"><option value="v1">n1</option></select>
<input type="button" onclick="test();" value="Add an option and select it." />
</p>
<script type="text/javascript">
    var inc = 1;
    var sel = document.getElementById('sel1');
    function test() {
        inc++;
        var o = new Option('n'+inc, inc);
        sel.options[sel.options.length] = o;
        o.selected = true;
        sel.selectedIndex =  sel.options.length - 1;
    }

    function myfunction() {
        document.title += '[CHANGED]';
    }

    //change to aop.after if you want to call afterwards       
      jQuery.aop.before( {target: window, method: 'test'}, 
        function() { 
          myfunctino(); 
        }
      );
</script>
</body>
Run Code Online (Sandbox Code Playgroud)