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


Автор: Непрофессионал 29.11.2003, 16:23
Прошу подсказать (если кто знает) - ситуация такая - есть страница из 2-х фреймов, в одном из них выписаны функции (JavaScript) А управление этими функциями нужно осуществлять из другого фрейма. Однако нигде не нашёл, как вызвать именно функцию. Если в форме во втором фрейме написано что-то вроде
onClick = "function_of_first_frame();" (там разные имена функций)
или
onClick = "parent.first_frame.function_of_first_frame();"

MSIE выдаёт ошибку "нулль или не является обьектом"


Автор: Dr.Death 29.11.2003, 18:03
Попробуй
Цитата

onClick = "javascript:parent.first_frame.function_of_first_frame();"

Автор: MuToGeN 30.11.2003, 05:43
> onClick = "javascript:parent.first_frame.function_of_first_frame();"

Не, это точно не то. javascript: - это что-то типа указания протокола в ссылках, так же как http:, ftp: или mailto:

Автор: Непрофессионал 30.11.2003, 11:15
Проверил,
вот так: onClick =
Код
"javascript:parent.first_frame.function_of_first_frame();


работает, при этом функция "видит" переменные, заданные в том же фрейме, что и она, но не видит их, если их имена передавать как параметры, то есть

Код

onClick = "javascript:parent.first_frame.function_of_first_frame(value_of_first_frame);


невозможно,
в то время как задать функцию

function function_of_first_frame("Х"){alert(value_of_first_frame+"Х")};

возможно, и переменную она (вызванная из др. фреймов) видеть будет

Автор: Alx 7.12.2003, 10:35
Интересно, а я вот мо молодости весной хотел создать такую программку:

В первом маленьком фрейме поля:

URL
Цвет бэкграунда
Цвет текста
и т.д.

Добрый юзверь выберает, что хочет и таким образом бродит по рунету и меняет странички. Зашёл на яндекс, сделал розовый фон. Разве не щщщастье? Так было бы что-то вроде

Код
window.frames("mainframe").document.bgColor=bgcolorsel.value


Что-то вроде этого, я уже не помню. Можеть здесь и есть ошибки, но когда я пытался это сделать, ничего не фурычило, я много менял вариантов!

Вот интересно, можно ли такое сделать?

Автор: Secandr 7.12.2003, 11:09
У меня так и не получилось вызвать функцию, но без проблем можно менять свойства какого либо объекта: parent.first_frame.form1.text1.value='bla.bla.alb.alb';

Так что можно просто повесить onCange на form1.text1 и вызывать функцию smile.gif

P.S. Чистой воды извращение smile.gif

Автор: Alx 7.12.2003, 11:23
Эт уж точно...)

Автор: Непрофессионал 7.12.2003, 16:54
У меня так и не получилось вызвать функцию
Возможно, зависит от браузера (??)

P.S. Чистой воды извращение

Это почему собственно?

Автор: Alx 7.12.2003, 18:15
Ну потому что извращение!)
Чтобы вызваь функцию, надо изменить свойство ни в чем неповинного объекта, а потом написать, чтобы при при изменении свойства ентого объекта вызывалась функция! разве не извращение?))

Автор: Непрофессионал 8.12.2003, 01:39
Цитата
Ну потому что извращение!)
Чтобы вызваь функцию, надо изменить свойство ни в чем неповинного объекта, а потом написать, чтобы при при изменении свойства ентого объекта вызывалась функция! разве не извращение?))


Если очень надо, то чем плохо, однако у меня так не получилось, MSIE реагирует только на такие onChange, которые пользователь производит мышью, или набирает с клавиатуры! (может, что-то не так сделал)

Автор: Alx 11.12.2003, 10:33
Я не знаю, что Вы сделали), но по-моему всё должно нормально работать... попробуйте с фокусом для type=text, действие onfocus... т.е.

parent.first_frame.form1.text1.focus()';

<input type="text" value="*" onfocus="func();" style="visibility:hidden;">

Кстати, я воть не очень хорошо помню на счёт взаимодействия фреймов, но разве перед parent не должно быть window или document...?

Автор: Secandr 11.12.2003, 16:22
нет перед parent ничего не ставиться.

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