5
回答
jQuery在iframe工作不正常
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   
<!doctype html>
<html>
<head>
    <style type="text/css">
        //some details
    </style>
    <script type="text/javascript" src="./js/jquery-1.4.3.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $(".teacherBtn").bind('click',function(){
                console.dir($("#questRange")); //it works when change the id to that occured in parent window (out of iframe).
                console.dir($(this));
                console.dir($(".teacherBtn"));
            });
        });
    </script>
</head>
<body>
    <div id="teacherCtrl">
        <form name="questOpt" id="questOpt"  action="questCtrl.php" method='post'>
            <div id="questRange" class='optSection'>
               //some details
            </div>
            <div id="questCtrl" class='optSection'>
               //some details
            </div>
            <div id='questType' class='optSection'>
               //some details
            </div>
            <input type="button" value="show" id="showPaper" name="showPaper" class="teacherBtn"/>
            <input type="button" value="download" id="downDoc" name="downDoc" class="teacherBtn" />
            <input type="button" value="submit" id="olTestOpt" name="olTestOpt" class="teacherBtn"/>

        </form>
    </div>
</body>
</html>

以上代码是以iframe的形式被载入到文档中(父文档称parent,此文档称iframe)。因为用了个jquery 的插件弹出窗口是用iframe的形式载入的。

现在的情况是,事件绑定正常,但是点击按钮后,选择器找不到相关的对象。将选择器改成parent中的元素的,就正常了。

我在另外的文档中测试,当iframe中重新载入了jquery库之后,$函数是在iframe文档中寻找,但是这里不知道有啥问题。在这里输出window的内容,也确实是iframe的window.

另外,如果我不在iframe中载入jq库,而是使用 $ = parent.$ 的形式引入$函数, $就会在parent中寻找元素。这个是为啥?我理解的$只是个函数而已。

举报
leetom
发帖于7年前 5回/2K+阅
共有5个答案 最后回答: 6年前

jquery找元素还是用window.document.getElementById,ByTagName诸如此类,这个window是jquery载入所在的那个window。所以parent.$(xxx)就找的是parent里面的。请看jquery源码最后一行。

至于找不到对象的就不知道了

引用来自“SeekerLee”的答案

jquery找元素还是用window.document.getElementById,ByTagName诸如此类,这个window是jquery载入所在的那个window。所以parent.$(xxx)就找的是parent里面的。请看jquery源码最后一行。

至于找不到对象的就不知道了

确实是,window在匿名函数运行时就已经传递进去了。

找不到对象这个确实太奇怪了....

引用来自“Midnight”的答案

哈哈, 楼主想偷懒~

这种方式我曾经尝试过

啥叫想偷懒啊...没有啊!

上边那个奇怪的问题,求助啊。

 发现用$("iframe")来取iframe不太稳定,经常无法取到;后来在iframe中加了一个id="frame",用jquery取$("#frame")就正常了
顶部