委托()TBODY TR中的一个类

时间:2011-11-19 00:41:26

标签: javascript jquery dom

我正在尝试使用.live().delegate()来加载我的JS后添加到DOM中的元素。

这有效:

$(".mouseRow tbody tr").live("click", function(event) { });

但是这不起作用而且没有给出错误,这让我觉得它是一个DOM计时的东西:

$(".mouseRow").delegate("tbody tr", "click", function(event) { });

我是否错误地调用.delegate()函数,可能使用“tbody tr”语句?或者这是DOM计时的问题,因为元素还不存在(这就是我首先使用live()的原因)?

1 个答案:

答案 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) { ... }));