用on()替换live()

时间:2012-06-04 15:01:29

标签: jquery

来自文档

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+

我正在使用jQuery 1.7.1

这适用于静态元素和动态加载的元素:

$("input").live("change", function () { alert("hello"); });

这不起作用,即使对于静态元素也不行:

$("document").on("change", "input", function () { alert("hello"); });

我错过了什么?

3 个答案:

答案 0 :(得分:8)

写一下

$(document).on("change", "input", function () { alert("hello"); });

您可以将document替换为closer parent element中始终存在的DOM,以获得更好的效果。像

$('#closest_static_container_id').on("change", "input", function () { 
     alert("hello"); 
});

如果您使用$("document"),jQuery将搜索名为node/tag的{​​{1}},如document,并且找不到任何内容,因为document实际上是{{1} }}

但您可以使用<document>,因为object$("body")的节点/元素。

答案 1 :(得分:4)

变化:

$("document").on(...)

要:

$(document).on("change", "input", function () { alert("hello"); });

document是一个对象(window的属性),而不是节点类型。

$("document").on(...)

正在寻找<document>对象中的document元素,例如:

<document>

正如你现在所知,没有......

无论如何,on的最佳做法是使用最接近动态添加元素的静态元素:

<div id='container-div-id'>
    <input />  ... this will be added later.
</div>

$('#container-div-id').on("change", "input", function () {
     alert("hello"); 
 });

答案 2 :(得分:2)

document是一个对象,您将其用作字符串。因此jQuery将尝试将其用作css选择器,并且它不会找到任何附加事件处理程序的内容。

试试这个。

$(document).on("change", "input", function () { alert("hello"); });