当我加载页面时,会触发更改事件处理程序。调用原始更改事件处理程序而不是新处理程序,在加载页面后,它使用正确的处理程序。如何让它在触发时使用新的处理程序?
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 -------------->
});
});
答案 0 :(得分:0)
JavaScript按顺序运行 - 在您有机会删除事件处理程序之前,您无法修改的代码会触发元素上的change事件(通过$('.b1', this).first().trigger('change');
)。