jQuery 的 live() 方法在 1.7 版本中面临弃用,需要切换到 on( )。虽然用 on() 替换 live() 理想情况下应该会产生类似的结果,但 on() 文档强调事件处理程序仅绑定到绑定时页面上当前选定的元素。
原始实现(live()):
$('select[name^="income_type_"]').live('change', function() { alert($(this).val()); });
替换(on()):
$('select[name^="income_type_"]').on('change', function() { alert($(this).val()); });
与 live() 的差异源于 on() 只绑定当前存在的元素,而不像 live() 附加事件的委托机制动态添加到 DOM 的元素的处理程序。
动态时正确使用 on()元素:
要使用 on() 维护动态添加元素的事件处理,事件处理程序必须绑定到绑定时页面上存在的父元素。这可以通过使用来实现:
$(document.body).on('change', 'select[name^="income_type_"]', function() { alert($(this).val()); });
或者,可以在元素层次结构中更紧密地应用事件委托以提高特异性。
jQuery 文档说明:
live() 文档明确指出,根据其后继者重写 live() 涉及将事件处理程序绑定到现有的元素:
$(document).on(events, selector, data, handler); // jQuery 1.7+
以上是对于动态添加的元素,如何正确地将 jQuery 的`live()`迁移到`on()`?的详细内容。更多信息请关注PHP中文网其他相关文章!