触发更改事件仍使用旧事件处理程序

时间:2015-03-24 07:16:56

标签: javascript jquery html

当我加载页面时,会触发更改事件处理程序。调用原始更改事件处理程序而不是新处理程序,在加载页面后,它使用正确的处理程序。如何让它在触发时使用新的处理程序?

HTML

<div class="test">
<ul>
    <li>S1
        <select class="b1">
            <option>Apple</option>
            <option>Orange</option>
        </select>
    </li>
    <li>S2
        <select class="b1">
            <option>White</option>
            <option>Blue</option>
        </select>
    </li>
</ul>
</div>

JS

$(document).ready(function () {
    $('.test').each(function () {

        <!----- Original code, can not be modified ----->

        var doc = this;
        $(doc).on('change', '.b1', function(ev){
            alert('this should not run');
        });

        $('ul', doc).each(function () {
            $('.b1', this).first().trigger('change');
        });
        <!------------- END -------------->

        <!----- Override change event ----->

        $(doc).off('change', '.b1');
        $(doc).on('change', '.b1', function(ev){
            alert('new change handler');
        }); 

        <!------------- END -------------->
    });
});

1 个答案:

答案 0 :(得分:0)

JavaScript按顺序运行 - 在您有机会删除事件处理程序之前,您无法修改的代码会触发元素上的change事件(通过$('.b1', this).first().trigger('change');)。