Запуск кода с фрейма, код в родительском окне - КАК ?
Здравствуйте, подскажите пожалуйста, как запустить javascript код который находиться в родительском окне, а кнопка для запуска находиться во фрейме на той же странице ? (Все находиться на одном домене)
Пример кода: Вот родительское окно, в нем код с функцией, кнопка запуска алерта находиться на странице 1.htm т.е. во фрейме <html> <head> </head> <body> <script> function cliKo() { alert('ok'); } </script> <br> <iframe nane="frame1" src="1.htm"></iframe> </body> </html> Вторая страница, тут находиться кнопка для запуска алерта: <html> <head> </head> <body> <input type="button" value="click" onclick="cliKo();"> </body> </html> Подскажите как запустить код ? |
onclick="top.cliKo();">
|
Цитата:
Но вариант с проверкой почему то не хочет работать, подскажите где ошибка пожалуйста. Родительская страница с кодом: <html> <head> </head> <body> <script> function eLogin() { if ((parent.document.getElementById('username').value=='') || (parent.document.getElementById('userpass').value=='')) {alert('ERROR.');return false;} setLogin(); return false; }; function setLogin() { alert('Login'); } </script> <br> <iframe nane="frame1" src="1.htm"></iframe> </body> </html> Страница с фреймом с кнопкой запуска кода: <html> <head> </head> <body> <input type="text" id="username"><br> <input type="text" id="userpass"><br> <input type="button" value="click" onclick="top.eLogin()"> </body> </html> Пробовал разные варианты: parent.document.getElementById('username').value window.parent.document.getElementById('username'). value top.document.getElementById('username').value window.top.document.getElementById('username').val ue Не хочет работать, подскажите пожалуйста где ошибка ? |
Цитата:
В него загружена какая-то страница, в которой создаётся фрейм (этот фрейм будет дочерним по отношению к родительскому окну). Во фрейм загружена какая-то страница, в которой создаётся кнопка. То есть фрейм находится на одной странице (загруженной в родительское окно), а кнопка находится на другой странице (загруженой в дочерний фрейм), а не так как вы написали. Главное понимать к какой странице относится скрипт, тогда станет понятно как обращаться к элементам этого скрипта: глобальные переменные и функции скрипта являются соответственно свойствами и методами того окна (объекта window), в которое загружена страница с этим скриптом. У вас все скрипты находятся на странице, которая загружена в родительское окно, поэтому при обращении к этим скриптам (переменным, функциям) из дочернего фрейма нужно использовать приставку parent (в данном случае также подойдёт и top), содержащую ссылку на родительское окно для этого фрейма (то есть окно, в которое загружена страница, на которой содержится код создания этого фрейма). Когда вы обращаетесь к содержимому фрейма из родительского окна можно начать с имени этого фрейма (есть также другие способы обращения и, кстати, name пишется через m), тогда как вы начали с parent (parent - ссылка на родительское окно, в данном случае на само себя). Проверить на локальном компьютере можете через IE, а в хроме, например, не даст политика безопасности (загрузив страницы на сервер по идее всё должно заработать), можно также проверить через denwer. |
А почему вы не делаете проверку во фрейме прям-так лучше-если все же надо так то вы неправильно делаете
лучше всего передать login и пароль в виде параметров onclick="top.eLogin(document.getElementById('usern ame').value,document.getElementById('userpass').va lue))"; а в функции eLogin(name,pass){alert(name),alert(pass)} |
если надо из родительского документа обратиться в дочерний то так
window.frames[0].document.body но это некроссбраузерный вариант-на какихто браузерах не будет работать-под рукой кроссбраузерного нет ну и как писали выше с локального диска в хроме вообще не обратишся |
Спасибо vadim5june за помощь, реализовал вот так:
<script> function eLogin() { if ((document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('username').value=='') || (document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('userpass').value=='')) {alert('ERROR.');return false;} setLogin(); return false; }; </script> Особенно помог пример window.frames[0].document.body А на счет проверки прямо в фрейме, так это просто пример, функция имеет абсолютно другой вид =) Ещё рас спасибо вам за помощь. |
Цитата:
|
Часовой пояс GMT +3, время: 18:42. |