Селектор jQuery не работает в iframe - PullRequest
2 голосов
/ 09 октября 2011

У меня есть код во фрагменте iframe (загруженный ajax), но только $(".teacherBtn") работает и правильно связывает обработчик событий. Но эти селекторы в функции обратного вызова не будут работать. Только второй console.dir($(this)) имеет правильный вывод. Я загрузил jquery lib как обычную страницу.

Похоже, что функция $ находит expression в дереве документов родительского окна. Но я проверил это в простом файле, и он показывает, что при загрузке библиотеки jq в документ iframe's функция будет работать в дереве документов дочернего окна. Я думаю, что должно быть что-то не так в области видимости или элементе окна, но я не знаю, как это решить.

Мне также интересно, каковы различия между повторным импортом jq lib и использованием $ = parent.$. Я думал, что $ это просто функция, но оказывается, что при импорте библиотеки $("exp") найдет элемент в iframe, а $ = parent.$ будет в тегах родительского окна.

<script type="text/javascript">
        $(function(){
            $(".teacherBtn").bind('click',function(){
                console.dir($("#questRange"));
                console.dir($(this));
                console.dir($(".teacherBtn"));
            });
        });
</script>

Все эти .teacherBtn #questRange находятся во iframe фрагменте. Вот HTML-документ, и он находится во фрагменте iframe. Я использую плагин JQ, который помогает всплывающее окно, которое содержится в разделе iframe. Я действительно не хочу использовать iframe.

<!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 width="100%" scrolling="auto" frameborder="0" src="test/teacher.php" name="1991_content" id="1991_content" style="height: 495px;"></iframe>. iframe создается плагином jq.

1 Ответ

2 голосов
/ 20 ноября 2012

Попробуйте:

$("iframe").contents().find(/* selector goes here */);

Замените "iframe" на ваш CSS-селектор, который вы будете использовать, чтобы найти рамку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...