代码之家  ›  专栏  ›  技术社区  ›  acid

jQuery live()与1.7中的on()+

  •  3
  • acid  · 技术社区  · 12 年前

    我知道从jQuery1.7开始,.live()方法就不推荐使用了。这就是我的想法:

    $(document.body).on('click', '#list', function() {
        console.log($(this));
    });
    

    这几乎起到了作用,相当于:

    $('#list').live('click', function(){
        console.log($(this));
    });
    

    他们都归还了 #列表 jQuery对象,这正是我想要的。 然而,问题是当我将jQuery对象作为第二个参数而不是字符串(这种情况经常发生)传递时,例如:

    var list = $('#list');
    $(document.body).on('click', list, function() {
        console.log($(this));
    });
    

    控制台返回 $(正文) jQuery对象。这在那一点上毫无用处。) 有什么想法吗?

    编辑:这里的问题是 不是 如何访问示例1和2中受影响的对象$('#list'),但在示例3中如何访问它。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Besnik hsz    12 年前

    你会在官方网站上找到一个非常明确的答案 docs 以下为:

    此后不再建议使用.live()方法 jQuery的版本提供了更好的方法,而这些方法没有 缺点。特别是,使用 .live():

    • jQuery在调用 .live() 方法,可能是 处理大型文档非常耗时。
    • 不支持链接方法。例如 $("a").find(".offsite, .external").live( ... ); 有效,但未按预期工作。
    • 由于所有 .live() 事件附加在 document 元素,事件花费的时间最长和最慢 处理它们之前的可能路径。
    • 使命感 event.stopPropagation() 中的事件处理程序在停止事件处理程序时无效 附在文件下方;事件已传播到 文件
    • 这个 .live() 方法以可能令人惊讶的方式(例如。, $(document).unbind("click") 删除所有单击处理程序 通过任何电话附加到 .live() !
        2
  •  1
  •   bcmcfc    12 年前

    将对象作为第二个参数传递给 on

    来自 docs 以下为:

    .on( events [, selector] [, data], handler(eventObject) )

    它要求一个选择器,而不是jQuery对象,因此您需要使用:

    $(document.body).on('click', '#list', function() {
        console.log($(this));
    });