来自文档
$(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"); });
我错过了什么?
答案 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"); });