在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; } });
刚刚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)
示例图像视图