如何将jQuery 1.8.3中的“live”替换为jQuery 1.9?

我的Web框架自动将我的jQuery脚本更新为当前的最新版本1.9。

现在我的全部:

$(".myclass").live("click", function() {... 

不再工作了。 我主要使用它与一些在我的页面中填充html的ajax。

我会知道如何在上一版本中替换此function。 一位朋友告诉我改为使用“on”,但“on”仍然固定在同一个元素上。

解释,在这个例子中(没有ajax),我使用“+”图标来显示“ul li list”。

 $(".closed").live('click', function(){ $("#ul_list_"+$(this).attr('id')).addClass("displayed").removeClass("hidden").show(); $(this).addClass("openned").removeClass('closed'); $(this).html(''); }); $(".openned").live('click', function(){ $("#ul_list_"+$(this).attr('id')).addClass("hidden").removeClass("displayed").hide(); $(this).addClass("closed").removeClass('openned'); $(this).html(''); }); 

(我知道脚本不是最优化的,但它确实有效。我使用类来打开或关闭我的列表。如果访问者没有启用JS,则不会隐藏任何内容,所有折叠列表都会打开)

笔记:

  • 我试过https://github.com/jquery/jquery-migrate ,但我唯一的消息是“JQMIGRATE:jQuery.fn.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+ 

所以: $(document).on("click", ".closed", function() { ... })

您需要使用委托处理程序:

 $('#parent').on('click', '.closed', function() { // your code... }); 

请注意,您应该将#parent替换#parent与页面加载时可用的.closed最接近的父元素 – 通常是附加.closed的元素。

你必须使用on而不是live 。 因为在1.7版本上不推荐使用live