Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Передача данных во фрейм





Обычной задачей при разработке типового Web-узла является загрузка результатов исполнения CGI-скрипта во фрейм, отличный от фрейма, в котором вводятся данные для этого скрипта. Если путь загрузки результатов фиксированный, то можно просто использовать атрибут TARGET формы. Сложнее, если результат работы должен быть загружен в разные фреймы (например, в зависимости от выбранной кнопки).

Применим полученные нами знания для решения этой задачи. Сначала заготовим следующие файлы. Основной файл, например,index. htm, содержит левый фрейм, в котором будет находиться форма, и правый фрейм, разбитый на два подфрейма (верхний и нижний). Файл left. htm содержит форму, в которой пользователю предоставляется возможность выбрать верхний или нижний фрейм и нажать кнопку "Загрузить". Файл right. htm содержит простой текст; он будет загружаться в верхний или нижний фрейм, в зависимости от действий пользователя.

Основной файл с тремя фреймами Файл с формой left. htm в левом фрейме Файл right. htm
<HTML> <HEAD> <TITLE>Три фрейма</TITLE> </HEAD> <FRAMESET COLS="50%,*"> <FRAME NAME=leftframe SRC=left.htm>   <FRAMESET ROWS="50%,*"> <FRAME NAME=topframe SRC=""> <FRAME NAME=botframe SRC=""> </FRAMESET>   </FRAMESET> </HTML> <HTML> <HEAD> <SCRIPT SRC="loadframe.js"></SCRIPT> </HEAD> <BODY> <FORM METHOD=post ACTION=right.htm NAME=f onSubmit="return load();"> <SELECT NAME=s> <OPTION>верхний</OPTION> <OPTION>нижний</OPTION> </SELECT> <INPUT TYPE=submit VALUE="Загрузить"> </FORM> </BODY> </HTML> <HTML> <BODY>   Этот документ мы загружаем при выборе фрейма из списка   </BODY> </HTML>

Для того, чтобы пример заработал, остается в файле loadframe.js описать функцию load (). Функция должна делать так, чтобы в зависимости от выбора пользователем значения селектора "верхний" или "нижний" файл right. htm загружался бы либо в правый верхний, либо в правый нижний фрейм. С этой целью в файле left. htm у формы не был указан целевой фрейм (атрибут TARGET).

Нашу задачу динамического выбора фрейма можно решать по-разному. Более изящный способ - переназначать "на лету" свойство target, с него мы и начнем (открыть).

function load()

{

if(document.f.s.selectedIndex==0)

{

document.f.target = "topframe";

top.frames[2].document.open();

top.frames[2].document.close();

}

else

{

document.f.target = "botframe";

top.frames[1].document.open();

top.frames[1].document.close();

}

return true;

}

4.8. Файл loadframe.js: переназначение target на лету

Функция load () всегда возвращает true, а поскольку она вызывается из обработчика события onSubmit, это означает, что всегда будет происходить отправка формы (событие Submit), т.е. загрузка страницы right. htm, указанной в атрибуте ACTION данной формы. Обратите внимание также на следующие строки в функции load ():

top.frames[1].document.open();

top.frames[1].document.close();

Смысл их таков: когда пользователь выбирает значение верхний или нижний в форме, то файл right. htm загружается в соответствующий фрейм, а оставшийся фрейм открывается на запись (методом...document.open(), при этом всё его содержимое очищается) и закрывается (методом...document.close()), тем самым фрейм остаётся пустым (без текста).

Теперь рассмотрим второй подход - открытие окна с именем, совпадающим с именем фрейма topframe или botframe. Его идея состоит в том, что при попытке открыть окно с именем существующего окна новое окно не открывается, а используется уже открытое. Фрейм - это тоже окно, поэтому на него данное правило распространяется. Функция, реализующая такое поведение, приведена ниже (открыть):

function load()

{

if(document.f.s.selectedIndex==0)

{

window.open("right.htm","topframe");

top.frames[2].document.open();

top.frames[2].document.close();

}

else

{

window.open("right.htm","botframe");

top.frames[1].document.open();

top.frames[1].document.close();

}

return false;

}

4.9. Файл loadframe.js: использование window.open()

В этом подходе функция load () всегда возвращает false. Это необходимо, чтобы отменить отправку данных формы: ведь после того, как мы вызвали window.open(), в отправке данных формы, т.е. загрузке файла right. htm, уже нет надобности.

 







Date: 2016-05-24; view: 395; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.009 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию