在jQuery中将live()转换为on()

我的应用程序已dynamic添加下拉菜单。 用户可以根据需要添加任意数量。

我传统上使用jQuery的live()方法来检测其中一个下拉列表是否为change() ed:

 $('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()时存在于页面上。

相当于.live()会是这样的

 $(document.body).on('change', 'select[name^="income_type_"]', function() { alert($(this).val()); }); 

尽pipe将事件处理程序尽可能靠近元素绑定,即更接近层次结构的元素更好。

更新:在回答另一个问题时,我发现在.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+ 

除了选定的答案之外,

jQuery.live到jQuery 1.9以上,同时等待您的应用程序迁移。 添加到您的JavaScript文件。

 // Borrowed from jQuery 1.8.3's source code jQuery.fn.extend({ live: function( types, data, fn ) { if( window.console && console.warn ) { console.warn( "jQuery.live is deprecated. Use jQuery.on instead." ); } jQuery( this.context ).on( types, this.selector, data, fn ); return this; } }); 

或者,您可以使用https://github.com/jquery/jquery-migrate

刚刚find了一个不涉及编辑第三方代码的更好的解决scheme:

https://github.com/jquery/jquery-migrate/#readme

在Visual Studio中安装jQuery Migrate NuGet包,使所有版本问题消失。 下一次微软更新他们的不显眼的AJAX和validation模块也许尝试没有再次迁移脚本,看看他们是否解决了这个问题。

由于jQuery Migrate由jQuery Foundation维护,我认为这不仅是第三方库的最佳方法,而且还为您自己的库提供警告消息,详细说明如何更新它们。

除了选定的答案之外,

如果您使用Visual Studio ,则可以使用“正则expression式replace”
在编辑>查找和replace>在文件中replace
或按Ctrl + Shift + H

在查找和replacepopup窗口中,设置这些字段

find: \$\((.*)\)\.live\((.*),
replace为: $(document.body).on($2,$1,
在查找选项中,选中“使用正则expression式”

jquery verision xxxjs打开编辑器,findjQuery.fn.extend

添加代码

 live: function( types, data, fn ) { jQuery( this.context ).on( types, this.selector, data, fn ); return this; }, 

例如:jquery-2.1.1.js – > 7469行(jQuery.fn.extend)

示例图像视图