我的应用程序已动态添加下拉菜单。用户可以根据需要添加任意数量。
我传统上使用 jQuery 的live()方法来检测这些下拉列表之一何时被change()编辑:
live()
change()
$('select[name^="income_type_"]').live('change', function() { alert($(this).val()); });
从 jQuery 1.7 开始,我已将其更新为:
$('select[name^="income_type_"]').on('change', function() { alert($(this).val()); });
查看文档,这应该是完全有效的(对吗?) - 但事件处理程序永远不会触发。当然,我已经确认 jQuery 1.7 已加载并运行等。错误日志中没有错误。
我究竟做错了什么?谢谢!
on文档状态(粗体;)):
on
事件处理程序仅绑定到当前选定的元素;当您的代码调用.on().
.on()
相当于.live()会像
.live()
$(document.body).on('change', 'select[name^="income_type_"]', function() { alert($(this).val()); });
尽管最好将事件处理程序绑定到尽可能靠近元素的位置,即绑定到层次结构中更靠近的元素。
更新: 在回答另一个问题时,我发现.live文档中也提到了这一点:
.live
.live()根据其后继者重写该方法很简单;这些是对所有三种事件附件方法进行等效调用的模板: $(selector).live(events, data, handler); // jQuery 1.3+ $(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ $(document).on(events, selector, data, handler); // jQuery 1.7+
.live()根据其后继者重写该方法很简单;这些是对所有三种事件附件方法进行等效调用的模板:
$(selector).live(events, data, handler); // jQuery 1.3+ $(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ $(document).on(events, selector, data, handler); // jQuery 1.7+