ajax加载内容上的jquery选择器失败

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

我有一个通过ajax加载的对话框。ajax的paylaod包含html和javascript

该对话框显示得很好,并执行该负载中包含的JS

但是,我无法从负载中的JS中选择任何元素,无论是按id、类还是按元素类型

假设有效载荷有:

<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它确实很笨重,但在这种情况下,我认为没有其他方法: