使用jQuery .on与使用.live?

fir*_*ger 0 jquery jquery-on

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

举个例子,这是我的代码:

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

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

$("#removeitem").live("click", function(event) { alert($(this).text()); });
Run Code Online (Sandbox Code Playgroud)

gdo*_*ica 7

live 版:

$("#removeitem").live("click", function(event) { alert($(this).text()); });
Run Code Online (Sandbox Code Playgroud)

应改为:

$("#containerId").on("click", "#removeitem", function(event) { 
    alert($(this).text()); 
});
Run Code Online (Sandbox Code Playgroud)

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

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

$("body").on('click', '#removeitem'm fn);
Run Code Online (Sandbox Code Playgroud)

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


笔记:

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

更新:

也许那是我的问题 - 我只是用.on替换了.live

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

阅读每个功能的文档:

on:

.on(events [, selector] [, data], handler(eventObject)) 
Run Code Online (Sandbox Code Playgroud)

live:

.live( events, handler(eventObject) )
Run Code Online (Sandbox Code Playgroud)