ajax加载内容上的jquery选择器失败
我有一个通过ajax加载的对话框。ajax的paylaod包含html和javascript 该对话框显示得很好,并执行该负载中包含的JS 但是,我无法从负载中的JS中选择任何元素,无论是按id、类还是按元素类型 假设有效载荷有:ajax加载内容上的jquery选择器失败,ajax,jquery-selectors,zotonic,Ajax,Jquery Selectors,Zotonic,我有一个通过ajax加载的对话框。ajax的paylaod包含html和javascript 该对话框显示得很好,并执行该负载中包含的JS 但是,我无法从负载中的JS中选择任何元素,无论是按id、类还是按元素类型 假设有效载荷有: <div> <ul id="testid"> <li>A</li> <li>B</li> </ul> </div> <script t
<div>
<ul id="testid">
<li>A</li>
<li>B</li>
</ul>
</div>
<script type="text/javascript">
$(document).ready(function() {
console.info('test: ' + $("#testid").length);
});
</script>
这将导致控制台中出现测试:0
如果我将选择器更改为在“body”上选择,则会导致非零值
很明显,加载的内容正在被显示,它包含的JS正在被执行,我的理解是.ready调用应该允许DOM时间被更新以包括html负载
不幸的是,在本例中,我无法直接控制ajax加载本身,因为我使用的框架为我提供了对话框功能
奇怪的是,我所拥有的其他ajax加载页面中有JS,JS在ajax加载的负载中选择元素,这些页面正在工作——到目前为止,它只是一个对话框,似乎失败了
我有点不明白为什么这会出错。在过去的几天里,我做了尽职调查,搜索了谷歌等,但没有找到解决方案,所以我想在这里大声呼救
Jason我相信ready只在第一次加载页面时才起作用。如果取决于AJAX调用的结果,则需要使用回调,因为操作是异步的。zotonic是否提供您可以使用的挂钩?否则会有点困难。也许您可以在页面加载时这样轮询DOM:
<script type="text/javascript">
$(document).ready(function() {
var interval = setInterval(function() {
if($("#testid").length > 0) {
clearInterval(interval);
console.info('test: ' + $("#testid").length);
}
}, 750);
});
</script>
这将每750ms查询一次testid页面。如果它找到了元素,间隔将被取消,您应该会得到一个控制台输出。感谢计时器的建议-这对我来说确实有效。。据我所知,zotonic中没有钩子可以让我知道加载ajax的对话框何时完成了DOM的更新。。虽然我想我可能会向他们建议,因为在有效的情况下按计时器做事:对他们来说似乎有点笨重me@JAT它确实很笨重,但在这种情况下,我认为没有其他方法: