【问题标题】:jQuery live() works with jQuery 1.8.3 & below but not with 1.9.1 or 2.0jQuery live() 适用于 jQuery 1.8.3 及以下版本,但不适用于 1.9.1 或 2.0
【发布时间】:2013-05-14 12:35:24
【问题描述】:

我已经使用http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js 一段时间了,一切都很好,但是 1.8.3 已经很老了,所以我决定迁移到最新的 jQuery。突然间,一些事情停止了工作:Quicksand plugin 和我自己的 jQuery 代码的一部分(在滑块的每张幻灯片下显示附加数据)。

你能帮我找出问题所在吗?或者也许不值得迁移到 1.8.3 以上的 jQuery 版本?检查 Jsfiddle。

HTML:

<a href="#" class="show" data-show="first">SHOW</a>
<a href="#" class="show" data-show="second">SHOW</a>

<div id="first">First paragraph.</div>
<div id="second">Second paragraph</div>

JS:

jQuery(".show").live("click", function (e) {
    var slide = '#' + jQuery(this).data('show');
    jQuery(slide).slideToggle();
    e.preventDefault();
});

CSS:

div { display: none; }

这是一个有效的 jsfiddle:http://jsfiddle.net/ABrna/

尝试将 jQuery 更改为 1.9.1 或 2.0 并点击运行。脚本停止工作。为什么?

【问题讨论】:

标签: jquery live jquery-1.9 jquery-1.8 jquery-2.0


【解决方案1】:

.live() 方法自 jQuery 1.7 起已被弃用,并在 1.9 中被删除。

http://jquery.com/upgrade-guide/1.9/#live-removed

【讨论】:

    【解决方案2】:

    从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 来 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 优先于 .live()。

    Doc.

    【讨论】:

      【解决方案3】:

      等价于.live() 使用委托与.on() 是:

      jQuery(document).on("click",".show", function (e) {
          var slide = '#' + jQuery(this).data('show');
          jQuery(slide).slideToggle();
          e.preventDefault();
      });
      

      但您不应在文档级别设置委托,而应使用最近的静态容器。

      【讨论】:

        【解决方案4】:

        jQuery 2.0 弃用了 live 函数。你可以在http://blog.jquery.com/2013/04/18/jquery-2-0-released/找到更多信息

        【讨论】:

        • 在此之前已被弃用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-18
        • 2010-12-07
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        相关资源
        最近更新 更多