【问题标题】:Using jQuery .on vs. using .live?使用 jQuery .on 与使用 .live?
【发布时间】:2012-06-02 19:57:07
【问题描述】:

简单的问题,因为 1.7 版本的 jQuery .live() 已被弃用,取而代之的是 .on();但是 .on() 似乎不适用于通过 JavaScript 呈现并加载到 DOM 中的元素。所以我的问题是,是否仍应使用 .live() 或 .on() 如何捕获这些新生成的元素?

例如,这是我的代码:

$("#listitem").append("<li id='removeitem'>" + 
       formdata + ' <a href="#">Remove</a></li>');

当我尝试通过 .on() 对这个元素进行操作时 - 结果什么都没有,而 .live() 能够抓住这个元素。

$("#removeitem").live("click", function(event) { alert($(this).text()); });

【问题讨论】:

标签: jquery jquery-on


【解决方案1】:

live版本:

$("#removeitem").live("click", function(event) { alert($(this).text()); });

应该改为:

$("#containerId").on("click", "#removeitem", function(event) { 
    alert($(this).text()); 
});

其中containerIdremoveitem 加载到的静态 元素。

您可以简单地使用body 作为静态元素:

$("body").on('click', '#removeitem'm fn);

但是代码效率会低一些,试着用它来展示一下它是如何工作的。


注意事项:

  1. 我希望您没有多个元素具有相同的 id,因为它是无效标记。
  2. 看起来listitem 是您代码中的静态元素。

更新:

也许这是我的问题 - 我刚刚将 .live 替换为 .on

您不能简单地替换它们...它们以其他方式工作,并且具有不同的参数!

阅读每个函数的文档:

on:

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

live:

.live( events, handler(eventObject) )

【讨论】:

  • 正确的 id 只是我放在这里的东西,实际上我有一个我分配的动态生成的类,例如“item1”、“item2”等
  • 现在如果这些是动态元素怎么办,换句话说,我不会提前知道它们是否有 2 个或 5 个,那么我将如何编写#removeitem,如果它真的更像.removeitem1 和 .removeitem2?
  • 你可以使用像[class^=removeitem]这样的选择器开始,它将选择所有类名以removeitem开头的元素
  • @firedrawndagger。给所有新元素一个类,比如item 并使用这个$('body').on('click', '.item', handler);
  • 但如果我只想要其中一个,例如从一个列表中,只删除具有类 .removeitem3 的那个,而其他的则保留?
【解决方案2】:

你应该像这样尝试.on()

$('#listitem').on('click', '#removeitem', function() {
    alert($(this).text());
});

DEMO

如果您没有像removeitem 这样的固定ID,并且如果它的结构像removeitem1removeitem1 等,请尝试:

$('#listitem').on('click', '[id^=removeitem]', function() {
    alert($(this).text());
});

【讨论】:

  • 如果他没有对您的回答发表评论,我不确定您是否可以通知 OP。
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
相关资源
最近更新 更多