Submit form in frame + event Handlers = new Window ... Why?
От: Andir Россия
Дата: 17.02.03 08:45
Оценка:
Привет RSDN!

Теперь мне нужна помощь ...

Ситуация такая:
Страница состоит из двух фреймов:
frame1 и frame2 (Причом второй фрейм имеет имя name="frame2")
Далее, в первом фрейме есть некая форма которая сабмитится во второй фрейм (target="frame2").
Во втором есть некоторый event handler события "onload", который подключается следующим образом : window.attachEvent("onload", OnloadHandler).
Теперь пытаюсь сабмитить форму, первый раз всё нормально, во второй раз стабильно открывается новое окно ...
Убираю из второго фрейма event handler и всё как и задумывалось (форма сабмитится во второй фрейм постоянно).

Как бы избавится от такого эффекта ???

P.S. От типа события тоже ничего не зависит, главное чтобы оно сработало хотя бы раз. (проверял на "document.onclick").

С Уважением, Andir!
... << using( RSDN@Home 1.0 beta 5 ) {/* Работаем */} >>
Re: Submit form in frame + event Handlers = new Window ... W
От: uzzy Россия  
Дата: 17.02.03 09:05
Оценка:
Здравствуйте, Andir, Вы писали:

A>Привет RSDN!


A>Теперь мне нужна помощь ...


A>Ситуация такая:

A>Страница состоит из двух фреймов:
A>frame1 и frame2 (Причом второй фрейм имеет имя name="frame2")
A>Далее, в первом фрейме есть некая форма которая сабмитится во второй фрейм (target="frame2").
A>Во втором есть некоторый event handler события "onload", который подключается следующим образом : window.attachEvent("onload", OnloadHandler).

может быть так:
parent.frames["frame2"].onload = OnloadHandler;

???
Re[2]: Submit form in frame + event Handlers = new Window ..
От: Andir Россия
Дата: 18.02.03 00:38
Оценка:
Здравствуйте, uzzy, Вы писали:

U>может быть так:

U>parent.frames["frame2"].onload = OnloadHandler;

Спасибо конечно, но это не то. Я же сказал, что событие прекрасно подключается и работает, явных ошибок в коде вроде нет, склонен считать это багом, но нужно как-то это обойти, хотя бы решение на пару дней.

C Уважением, Andir!
... << using( RSDN@Home 1.0 beta 5 ) {/* Работаем */} >>
Re[3]: Submit form in frame + event Handlers = new Window ..
От: uzzy Россия  
Дата: 18.02.03 05:31
Оценка:
Здравствуйте, Andir, Вы писали:

A>Спасибо конечно, но это не то. Я же сказал, что событие прекрасно подключается и работает, явных ошибок в коде вроде нет, склонен считать это багом, но нужно как-то это обойти, хотя бы решение на пару дней.


А Вам обязательно атачить event на window. Возможно, именно из-за этого и проблема.
можно сделать так наверно:
parent.frames["frame2"].document.body.onload=OnloadHandler;
Re[4]: Submit form in frame + event Handlers = new Window ..
От: Andir Россия
Дата: 18.02.03 06:03
Оценка:
Здравствуйте, uzzy, Вы писали:

U>А Вам обязательно атачить event на window. Возможно, именно из-за этого и проблема.

U>можно сделать так наверно:
U>
U>parent.frames["frame2"].document.body.onload=OnloadHandler;
U>


Нет и ещё раз нет, не зависит от типа события, я даже на document.onclick аттачил, как только один раз кликнешь, всё сразу же форма перестаёт постить во фрейм ...
Мне обойти такое поведение надо ... Сейчас ещё попробую iframe использовать, может чего заработает.

С Уважением, Andir!
... << using( RSDN@Home 1.0 beta 5 ) {/* Работаем */} >>
Re[5]: Submit form in frame + event Handlers = new Window ..
От: uzzy Россия  
Дата: 18.02.03 06:32
Оценка: 2 (1)
Здравствуйте, Andir, Вы писали:

Странно....
Пример у меня такой... и никаких новых окон.

index.htm
<html>
   <head>
      <TITLE>Frameset Template</TITLE>
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/nav4-0">
      <META http-equiv="Content-Type" content="text/html; charset=windows-1251">
   </head>
   <frameset rows="300,*">
      <frame name="banner" scrolling="no" noresize src="file:///C:\1\uu.htm">
      <frameset cols="333,*">
         <frame name="contents" frameBorder="1" src="file:///C:\1\l.htm">
         <frame name="main" src="file:///C:\1\r.htm">
      </frameset>
      <noframes>
         <p>This page requires frames, but your browser does not support them.</p>
      </noframes>
   </frameset>
</html>


uu.htm
<html>
   <head>
      <title></title>
      <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      <script id="clientEventHandlersJS" language="javascript">
<!--

function Button1_onclick() {
   _frame = parent.frames["contents"];
   if (_frame == null)
      return;
   obj = _frame.document.body;
   if (obj != null)
   {
      txt = obj.innerHTML;
      alert ("innerHTML" + txt);
   }
}

//-->
      </script>
   </head>
   <body onclick="javascript: alert ('Clicked!!!!');">
      <DIV style="DISPLAY: inline; WIDTH: 70px; HEIGHT: 15px" ms_positioning="FlowLayout">
         <P>Привет всем!!!</P>
      </DIV>
      <INPUT id="Button1" type="button" value="Button" name="Button1" language="javascript" onclick="return Button1_onclick()">
      <form target="main" action="r.htm" method="post">
         <input type="text" value="Привет!">
         <input type="submit" value="click_it">
      </form>
   </body>
</html>


l.htm
<html>
   <head>
      <title></title>
      <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
   </head>
   <body>
      <DIV style="DISPLAY: inline; WIDTH: 323px; HEIGHT: 119px" ms_positioning="FlowLayout">
         <P>Слева видна</P>
      </DIV>
   </body>
</html>


r.htm
<html>
   <head>
      <title></title>
      <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      <script id="clientEventHandlersJS" language="javascript">
      </script>
   </head>
   <body>
      <DIV id="DIV1" style="DISPLAY: inline; WIDTH: 323px; HEIGHT: 119px" ms_positioning="FlowLayout" language="javascript" onclick="return DIV1_onclick()">
         <P>Справа&nbsp;видна</P>
      </DIV>
   </body>
</html>


Вопрос... Вы в OnloadHandler ничего сверхъестественного не делаете...

P.S. Заранее извиняюс за возможные причиненные неудобства... просто мне скоро придется подобное что-то делать, и не хочется наступать на одни те же грабли.
Re[6]: Submit form in frame + event Handlers = new Window ..
От: Andir Россия
Дата: 18.02.03 07:03
Оценка:
Здравствуйте, uzzy, Вы писали:

U>r.htm

U>
U><html>
U>   <head>
U>      <title></title>
U>      <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
U>      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script id="clientEventHandlersJS" language="javascript">
    // ---> Копирайт ошибки by Andir! --->
    test_array=new Array();
    test_array["1"]=1;
    test_array["2"]=2;
    function Test()
    {
        for(name in test_array)
        {}
        alert("Load finish!");
        return;
    }
    window.attachEvent("onload", Test);
    // <--- <---
    
      </script>
U>   </head>
U>   <body>
U>      <DIV id="DIV1" style="DISPLAY: inline; WIDTH: 323px; HEIGHT: 119px" ms_positioning="FlowLayout" language="javascript" onclick="return DIV1_onclick()">
U>         <P>Справа&nbsp;видна</P>
U>      </DIV>
U>   </body>
U></html>
U>


Спасибо тебе товарищ дорогой, я всё таки нашёл в чём баг(благодаря тебе искал минимум кода, чтобы повторить ситуацию), минимальные исправления смотри в коде, ошибка выделена жирным, из-за неё я третий день проект не мог запустить в полёт ...

С Уважением Andir!
... << using( RSDN@Home 1.0 beta 5 ) {/* Работаем */} >>
Re[7]: Submit form in frame + event Handlers = new Window ..
От: uzzy Россия  
Дата: 18.02.03 07:14
Оценка:
Здравствуйте, Andir, Вы писали:

Да не за что...
Самые злостные ошибки сидят на самом видном месте. Удачи.
Re[8]: Submit form in frame + event Handlers = new Window ..
От: Andir Россия
Дата: 18.02.03 07:18
Оценка:
Здравствуйте, uzzy, Вы писали:

U>Да не за что...

U>Самые злостные ошибки сидят на самом видном месте. Удачи.
Нифига себе самое видное место, даже самым опытным взглядом не с третьего раза её найти можно ... И главное ведь никакого вразумительного сообщения ...

С Уважением, Andir!
... << using( RSDN@Home 1.0 beta 5 ) {/* Работаем */} >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.