Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Фрейм
 
 автор: serenya1983   (21.04.2010 в 00:33)   письмо автору
 
 

есть такой код:
1.

document.getElementById("id_div").innerHTML="<iframe id='id_fr_selected' name='id_fr_selected' src='...'> /iframe>";

и
2.

fr=window.frames["id_fr_selected"];

Всё бы хорошо, но когда код 1 выполнить два и более раза то в Mozille больше не присваивается значение fr (код 2).
Где я ошибаюсь?

  Ответить  
 
 автор: АЯ   (21.04.2010 в 01:16)   письмо автору
 
   для: serenya1983   (21.04.2010 в 00:33)
 

document.getElementById("id_div").innerHTML="<iframe id='id_fr_selected' name='id_fr_selected' src='...'> /iframe>";
здесь свою ошибку видите?
Подсказываю: закрывающий тег </iframe> надо писать именно ТАК.

  Ответить  
 
 автор: serenya1983   (21.04.2010 в 02:39)   письмо автору
 
   для: АЯ   (21.04.2010 в 01:16)
 

ой, это тут я так написал, в коде конечно всё в порядке в данном месте!!!

  Ответить  
 
 автор: АЯ   (21.04.2010 в 03:46)   письмо автору
 
   для: serenya1983   (21.04.2010 в 02:39)
 

Давайте рассуждать логически.
Первым присвоением innerHTML для дива вы создали новый объект - ифрейм.
Затем в переменную fr вы помещаете именно этот (первоначально созданный) объект.

Следующим переприсваиванием innerHTML для дива вы, во-первых, уничтожаете первоначально созданный объект (первый ифрейм) и, во-вторых, создаёте НОВЫЙ объект (второй ифрейм). Переменная же fr имеет ввиду тот самый ПЕРВЫЙ ифрейм, который уничтожен переприсваиванием. Но переменная fr об этом "уничтожении" ничего не знает. Для неё неважно, что второй ифрейм имеет того же родителя (тег див) и такой же id (и name), она помнит тот самый первый ифрейм. Которого уже нет в природе.


Ситуация аналогична вновь открываемому методом window.open окну, когда переменной присваивается открываемое новое окно. Пользователь вручную закрывает это новое окно, а переменная ничего об этом не знает. И когда вы обращаетесь к переменной, та (вместе с браузером) оказываются "в ступоре". Ибо переменная является ссылкой на несуществующий объект.

Код нумер один вам надо дополнить ВПЕРЕДИ оператором fr = null;

  Ответить  
 
 автор: serenya1983   (21.04.2010 в 04:34)   письмо автору
 
   для: АЯ   (21.04.2010 в 03:46)
 

дак присвоение fr=window.frames["id_fr_selected"]; идёт каждый раз перед тем как надо обратиться к фрейму, и переменная fr находиться внутри функции, поэтому врятли она имеет ссылку на первоначальный фрейм! Тут что-то другое (не работает только в Mozilla)!

  Ответить  
 
 автор: serenya1983   (21.04.2010 в 13:43)   письмо автору
 
   для: serenya1983   (21.04.2010 в 04:34)
 

решил проблему примерно так:

obj=document.getElementById("id_div");
if (obj.innerHTML=="") obj.innerHTML"<iframe id='id_fr_selected' name='id_fr_selected' src='...'> /iframe>"; 
else
{
fr=window.frames["id_fr_selected"];  
fr.document.location.href="...";
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования