Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Передача переменных из фрейма


Автор: MakNik 23.1.2008, 17:57
Динамически формируется страница, с фреймами (фреймов может быть любое количество, в данном примере 5)
Код

<iframe src="./go.php?id=559" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<iframe src="./go.php?id=1" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<iframe src="./go.php?id=559" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<iframe src="./go.php?id=559" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<iframe src="./go.php?id=13" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>


В каждом фрейме есть форма, с кнопкой "Выполнить". 
На основной странице есть форма с кнопкой "Внести изменения" при нажатии которой необходимо в БД внести id тех фреймов, в которых была нажата кнопка "Выполнить".
Подскажите, пожалуйста, как можно такой механизм реализовать? 

Автор: Sardar 23.1.2008, 20:21
В основном фрейме строиться скрытая форма, в которую добавляется всё необходимое (в виде hidden элементов) по кнопкам "Выполнить". Кнопкой "Внести изменения" форма разом уходит. Самый простой и вероятно самый корректный вариант.

P.S. сессии на сервере использовать не нужно - не модно и может подтромаживать smile

Автор: MakNik 24.1.2008, 11:29
В основном фрейме создаю форму:
Код

<form action='test.php' method='post' name='f1'>
<input type='hidden' name='id' value=12>
<input type='hidden' name='action' value='commit'>

<iframe src="./go.php?id=559" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<input type='hidden' value='0' name='catn[559]'>
<iframe src="./go.php?id=1" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<input type='hidden' value='0' name='catn[1]'>
<iframe src="./go.php?id=522" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<input type='hidden' value='0' name='catn[522]'>
<iframe src="./go.php?id=315" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<input type='hidden' value='0' name='catn[315]'>
<iframe src="./go.php?id=13" width=600 height=150 marginwidth="0" marginheight="0" hspace="0" vspace="0" scrolling="yes" frameborder="1" noresize=""></iframe><br>
<input type='hidden' value='0' name='catn[13]'>

<input type=submit value="Внести изменения"></center></form>


в php обрабатывается массив catn, где значение 0 указывает что кнопка "Выполнить" в конкретном фрейме не была нажата. 
Подскажите, пожалуйста, как из фрейма изменить конкретное значение в catn[]?

Автор: MakNik 24.1.2008, 12:05
В каждом фрейме при нажатии на кнопку выполняется скрипт, но значение не передается:

Код

<script type="text/javascript">
<!--
parent.document.f1.catn[559].value="1";
//-->
</script>


Подскажите, плз., как правильно?

Автор: Sardar 24.1.2008, 12:14
В основном фрейме пишем функцию:

Код

<script type="text/javascript">
function setCatalogSelection(id, sel) {
    try {
        document.forms.f1.elements["catn["+id+"]"].value = sel? 1: 0;
    } catch(e) {
        /* каталога с данным id не существует (его input:hidden), это ошибка, раппортируй к себе.
            если такого быть не может, убери try/catch */
    }
}
</script>


В ифрейме пишем window.parent.setCatalogSelection(к_примеру_45, true/false).

Добавлено через 3 минуты и 11 секунд
На клиенте всё же лучше:
Код

function selectCatalog(id) {
    if(window.parent.setCatalogSelection) {
        window.parent.setCatalogSelection(id, true);
    } //else -- фрейм открыт на прямую, можно сделать редирект
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)