0

一个简单的问题,因为 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()); });
4

2 回答 2

7

live版本:

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

应改为:

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

加载到containerId静态元素在哪里。removeitem

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

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

但是代码效率会降低,只需尝试使用它来展示它是如何工作的。


笔记:

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

更新:

也许这就是我的问题 - 我刚刚用 .on 替换了 .live

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

阅读每个函数的文档:

on

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

live

.live( events, handler(eventObject) )
于 2012-06-02T20:00:07.893 回答
1

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

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

演示

如果您没有固定的 idremoveitem并且如果它的结构像removeitem1,removeitem1等等,那么请尝试:

$('#listitem').on('click', '[id^=removeitem]', function() {
    alert($(this).text());
});
于 2012-06-02T20:00:31.607 回答