我正在用HTML实现树形浏览器.在单击节点时,我调用一个添加节点的子元素的函数.到现在为止还挺好.我现在想立即调用其中一个子元素的click处理程序来扩展它.我的问题是jQuery找不到刚刚添加的子元素.当我在调试器中单步执行时,我会在浏览器呈现新元素之前调用我的代码来查找元素,我猜这是问题所在.
是否有一些我可以等待的事件(类似于onload)可以标记新添加的HTML何时可见?或者我可以调用的方法强制渲染更早发生?欢迎大家提出意见.
注意:我已经意识到问题完全是我的错,而不是浏览器或jQuery.请参阅下面的答案.
Nic*_*ver 10
你可以使用.live()这个,将你的点击处理程序安装到它而不是.click()像这样:
$(document).ready(function() {
//instead of $(".myTreeNode").click(....
$(".myTreeNode").live('click', function() {
//Do stuff
});
});
Run Code Online (Sandbox Code Playgroud)
A .click()将事件处理程序绑定到它在执行时找到的元素,因此新元素没有处理程序. .live()而是在DOM级别监听点击以冒泡,所以如果现在或以后添加它们都无关紧要.在很多元素的情况下,对于每个元素,你也有事件处理程序而不是1,在几个元素之后,这也变得更有效.
我最终通过使用 setTimeout() 延迟我的代码直到渲染新元素来解决这个问题。但这不是一个理想的解决方案,因为我选择的超时时间相当任意。
我已经追根究底了。我调用的添加 HTML 的函数是通过回调异步执行的。因此,当我尝试查找新的 HTML 元素时,它们实际上还不存在。我现在更改了代码,因此回调还负责处理新添加的元素,从而保证它们会存在。
| 归档时间: |
|
| 查看次数: |
7600 次 |
| 最近记录: |