Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.01.2009, 15:43
Новичок на форуме
Отправить личное сообщение для Armagid Посмотреть профиль Найти все сообщения от Armagid
 
Регистрация: 30.01.2009
Сообщений: 4

Порядок выполнения JS в Opera
Привет всем. Кто может помочь с такой проблемой:

Есть функция:

function setInnerPage(){
if("AccountsCloseList" != "AccountStatus"){
var thisForm = document.forms[0];
var el = document.createElement("input");
el.type = "hidden";
el.name = "uri";
el.value = "AccountStatus";
thisForm.appendChild(el);
thisForm.submit();
top.top1.location = 'http://localhost/IB/top.jsp?lang-id=LV';
}
return false;
}


Ее вызывает:

<a href="#" onClick="javascript: setInnerPage(); return false;">
<img id="ge" src="http://localhost:80/banners/2.jpg" border="0" />
</a>


В IE и Firefox все работает, т.е при нажатии по картинке вызывается
setInnerPage(), происходит submit(), при этом на сервере выполняются нужные действия. Потом при "top.top1.location = '....'" показывается нужная информация. В Opera такое ощущение, что сначала срабатывает
"top.top1.location = '....'", что стоит в конце функции, а потом submit. После этого конечно ничего на экране правельного не показывается.

Спасибо.

Последний раз редактировалось Андрей Параничев, 30.01.2009 в 16:55. Причина: Пользуйтесь bb-тегами [js] и [html] для оформления листингов кода в теле сообщения
Ответить с цитированием
  #2 (permalink)  
Старый 30.01.2009, 15:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Armagid
if("AccountsCloseList" != "AccountStatus")
Жесть.
Ответить с цитированием
  #3 (permalink)  
Старый 30.01.2009, 16:32
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

А мы ещё над индийскими программерами смеёмся...
Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2009, 08:43
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

http://bash.org.ru/quote/354952

thisForm.submit();
top.top1.location = 'http://localhost/IB/top.jsp?lang-id=LV';

не делай так - либо сразу отправляй форму куда нужно, либо на сервере перенаправляй куда нужно
Ответить с цитированием
  #5 (permalink)  
Старый 02.02.2009, 18:50
Новичок на форуме
Отправить личное сообщение для Armagid Посмотреть профиль Найти все сообщения от Armagid
 
Регистрация: 30.01.2009
Сообщений: 4

Спасибо за комментарии. И все же почему только в Opera

это выполняется первое:
top.top1.location = 'http://localhost/IB/top.jsp?lang-id=LV';

а это вторым:
thisForm.submit();

когда в функции они стоят наоборот.
Ответить с цитированием
  #6 (permalink)  
Старый 02.02.2009, 19:02
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

потому что эти действия скорее всего выполняются после завершения функции - оба подразумевают, что после выполнения функции ничего на этой страничке выполнятся уже не будет, может разве что обработчик window.unload. Как такая ситуация должна рарзруливаться нигде не описано, а у Opera видимо другие приоритеты, возможно это какая-то оптимизация.

А в Opera оба действия выполняются, только в другой последовательности?

И вообще что именно происходит по щелчку на ссылке? зачем отправка формы и перенаправление?

Последний раз редактировалось x-yuri, 02.02.2009 в 19:05.
Ответить с цитированием
  #7 (permalink)  
Старый 03.02.2009, 11:46
Новичок на форуме
Отправить личное сообщение для Armagid Посмотреть профиль Найти все сообщения от Armagid
 
Регистрация: 30.01.2009
Сообщений: 4

Привет.
Там ситуация такая:
Есть frameset:
<frameset border="0" rows=" 93 ,*,35"
onUnLoad="return parent.checkupdate();"
>
<frame name="top1" scrolling="no" target="contents" src="http://localhost/IB/top.jsp?lang-id=LV" marginwidth="0" marginheight="0" />

<frameset cols="150,*" border="0">
<frame name="contents" target="main" src="http://localhost/IB/menu.jsp?lang-id=LV" scrolling="no" marginwidth="0" marginheight="0" />
<frameset rows="*,125" border="0">

<frame name="main" src="http://localhost/IB/servlet/AccountsList?lang-id=LV" scrolling="auto" target="_self" marginwidth="0" marginheight="0" />

<frame name="banner" src="http://localhost/IB/banners.jsp?lang-id=LV" scrolling="no" marginwidth="0" marginheight="0" border="0"/>
</frameset>
</frameset>

<frame name="bottom" scrolling="no" target="contents" src="http://localhost/IB/bottom.jsp?lang-id=LV" marginwidth="0" marginheight="0" />
</frameset>

В frame name="top" показываются верхние менюшки выбора
В frame name="contents" показываются слева тоже менюшки выбора, соответствующие верхнему выбору.
В frame name="main" показывается содержание страницы соответствующее левому выбору.
В frame name="banner" показывается картинка т.е. рекламный банер. На каждую менюшку, что с лева свой банер. Когда я кликаю по банеру, то
я должен перейти с одной левой менюшки на следующую.

Идея такая, что при клике по банеру я на сервер посылаю uri="screen_name" (это когда thisForm.submit()
Сервер получая имя экрана на который он должен переключится меняет
свой внутрений framework на этот новый screen_name. Но у пользователя еще висит старое состояние всех frames. Когда происходит
это:
top.top1.location = 'http://localhost/IB/top.jsp?lang-id=LV';

то верхий frame заново запрашивает свою страницу, т.е. если внутренний серверный framrwork имеет для frame="top" новое состояние оно отобразится. Далее верхний frame вызывает таким же способом:

top.contents.location = 'http://localhost/IB/menu.jsp?lang-id=LV';
новое состояние левого фрейма. Т.е. переключились на новый экран.

Т.е.:
В IE и Mozila:
1. Сначало сервер получая при "thisForm.submit();" изменяет внутренний framrwork на другой экран.
2. Потом запрашивается
top.top1.location = 'http://localhost/IB/top.jsp?lang-id=LV';
когда рефрешится верхний фрейм, это вызывает вызов такой же команды для левого фрейма, т.е. рефрешится левый фрейм.
Т.е. работает.

В Opera иногда срабатывает правильно. Но чаще сначало пункт 2. т.е. рефреш. А потом пункт 1 т.е. изменение экрана, но оно соответственно уже у пользователя не отображается.
Ответить с цитированием
  #8 (permalink)  
Старый 03.02.2009, 14:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

я бы отправлял на сервер информацию с помощью ajax, а при получении ответа менял содержимое нужного фрейма
p.s. использование фреймов очень редко оправдано
Ответить с цитированием
  #9 (permalink)  
Старый 03.02.2009, 15:06
Новичок на форуме
Отправить личное сообщение для Armagid Посмотреть профиль Найти все сообщения от Armagid
 
Регистрация: 30.01.2009
Сообщений: 4

спасибо за информацию.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка дополнительного js кода с сервера Anonymous2008 Общие вопросы Javascript 5 20.11.2008 12:33
ajax запрос с подгружемным js HelpeR AJAX и COMET 1 27.10.2008 12:44
Последовательность выполнения в динамическом js sovka Общие вопросы Javascript 2 18.10.2008 15:58
вызов функции, из JS генерируемого на сервере subaru AJAX и COMET 1 12.07.2008 13:44
Не возвращается XML-ответ в Opera после AJAX-запроса Yojik Общие вопросы Javascript 4 17.03.2008 05:56