在div中实现jQuery,其内容刚刚加载了jQuery的.load()

时间:2011-12-16 10:45:48

标签: jquery ajax iframe html refresh

我有一个使用jQuery使用.load()刷新的div。一旦它被刷新,新内容就会出现在div中。然而,新内容中包含jQuery,并且它不起作用,即使它在其自己的页面上加载内容时也能正常工作。

div也在父窗口上,但是刷新div的jQuery代码在iframe中。代码调用top.document(父窗口)来刷新iframe之外的div。

我会在这里显示完整的代码:

这是名为test.php的主页面。它只有一个简单的iframe,下面是代码在iframe中告诉它时刷新的div。

<html>
<head>
</head>
<body >
<iframe src="test2.php" width="400" height="400" frameborder="3"></iframe>
<div id="target">This text will be replaced.</div>
</body>
</html>

这是if2.mep里面的test2.php,它只是开始的iframe页面,所以你可以方便地按下一个链接,激活下一页,当页面加载时打开jQuery代码。

<html>
<head>
</head>
<body>
<a href="test3.php">Click Me, if the div below reloads with the jqery content it worked!</a>
</body>
</html>

这是带有jQuery代码的页面test3.php,它刷新了iframe之外的div。 .load()有效,但.get()不起作用。我试图用.get()和.getscript()调用jQuery,但确实有效。我也尝试将它们包装在.bind()。on()。live()中,但是如果你知道一种使用它们的方式,你认为它会工作随时发布它。

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript">

$('#target', top.document).load("test4.php");
$('#target', top.document).get('testb.js');

</script>
</head>
<body>
Sent
</body>
</html>

这是test4.php,它是刷新后加载到div中的新内容。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<p>....Polo</p>
<script type="text/javascript" src="testb.js"></script>

现在这里是我试图在div中实现的jQuery,它在test3.php和test4.php页面上的testb.js里面。我打算做更复杂的代码,但由于没有jQuery工作,我决定简化它,直到找不到jQuery工作的原因。

var myvariable = "Marco";
$("p").prepend(myvariable);

非常感谢你给予的任何帮助!

1 个答案:

答案 0 :(得分:1)

我实际上建议你不要这样做。当然你不应该有片段然后加载更多的片段。这种方式会导致疯狂。

我能够让它发挥作用,但如果我让它再次写,我会做不同的事情。它似乎很脆弱,当然很难测试。我相信如果主文档中包含所有逻辑,那么它的效果会更好,并且片段不会带来任何逻辑。

我在加载()时遇到了问题,但我无法回想起确切的细节。可能是浏览器之间的差异?我们最终使用get()而不是load()。

最大的问题是$(&#39; #target&#39;)失败,因为新的Javascript没有及时附加到文档。因此,在load()调用期间触发时,它不会在主机文档中找到ID。我能够使用setTimeout()

解决这个问题
<body>
    <div id="stuff>
        <script type="text/javascript">
            setTimeout(function() {
                $('#target', top.document).get('testb.js');
            }, 1);
        </script>
        Sent
    </div>
</body>

棘手的一点实际上可能与我抓住DIV的方式相同:

$.get("/foo/bar", function(html) {
    var div = $('<div></div>');
    div.html(html);
    div.find('#stuff').detach().appendTo(target);
});