我正在尝试使用.live()
和.delegate()
来加载我的JS后添加到DOM中的元素。
这有效:
$(".mouseRow tbody tr").live("click", function(event) { });
但是这不起作用而且没有给出错误,这让我觉得它是一个DOM计时的东西:
$(".mouseRow").delegate("tbody tr", "click", function(event) { });
我是否错误地调用.delegate()
函数,可能使用“tbody tr
”语句?或者这是DOM计时的问题,因为元素还不存在(这就是我首先使用live()
的原因)?
答案 0 :(得分:1)
如果您在评论中说.mouseRow
是您要应用于tr
元素的类,则需要:mouseRow
是一个类在table
元素上,您想在其中点击tr
元素的点击次数。如果在您连接处理程序时存在table.mouseRow
元素,您可能需要这样:
$("table.mouseRow tbody").delegate("tr", "click", function(event) { ... });
它将click
内的tbody
事件挂钩在table.mouseRow
内,当它发生时,会检查实际点击的tbody
元素链,以查看是否它们中的任何一个都与选择器tr
匹配。如果是这样,它会调用带有this
引用相关行的事件处理程序。
或者从jQuery 1.7开始,建议使用on
来做这类事情:
$("table.mouseRow tbody").on("click", "tr", function(event) { ... });
(请注意,参数的顺序略有不同。)
无论哪种方式,当table.mouseRow tbody
已经在DOM中时执行该语句。如果它还没有,你需要进一步推进DOM,可能一直到document
:
$("table.mouseRow tbody tr").live("click", function(event) { ... });
// or (1.7 onward):
$(document).on("click", "table.mouseRow tbody tr", function(event) { ... }));