Несколько отправок за одно действие не работают в IE8 на 64-разрядной версии Win7

#javascript #internet-explorer-8 #submit

#javascript #internet-explorer-8 #Отправить

Вопрос:

У меня есть 2 фрейма на странице, где frame1 вызывает метод Javascript на frame2. Во frame2 мы выполняем отправку, которая не выполняется. Когда мы возвращаемся к frame1, он выполняет собственную отправку, и это работает нормально. Обе отправки отправляют данные на сервер.

FRAME1.HTM

 function doSubmit(selectedTab)
{
    if (checkFieldsChanged() == true) 
       {
        ...
        if(selectedTab >= 0)
                    document.forms[0].action="WebDesk?op=dmamp;id=11097DETH000000amp;FormNo="   selectedTab;
        document.forms[0].submit();
    }
}

function checkFieldsChanged()
{
    ...
        if (confirm("Do you want to save the changes you have made?"))
        {
            // try to submit the form.
            try
            {
                return parent.frames[1].doSubmit();
            }
            catch (e)
            {
                ...
            }
        }
    return true;
}
...
    <FORM METHOD="POST" ACTION="WebDesk?op=dmamp;id=11097DETH000000amp;FormNo=" TARGET="WorkitemContents11097DETH000000">
  

FRAME2.HTM

 function doSubmit()
{
    ...
        **// Nothing happens here on this submit
        document.forms[0].submit();** 
        return true;
}
...
   <form METHOD='POST' ACTION='WebDesk?' onsubmit="return ReqdFieldChk();">
       <input TYPE='hidden' NAME='op' VALUE='f'/>
       <input TYPE='hidden' NAME='id' VALUE='11097DETH000000'/>
       <input TYPE='hidden' id='FormNo' NAME='FormNo' VALUE='3'/>
       <input TYPE='hidden' id='send' NAME='send' VALUE='false'/>
  

Поэтому doSubmit для FRAME1 вызывается обработчиком onclick, который вызывает checkFieldsChanged, который выполняет doSubmit для FRAME2. Когда мы вызываем submit в FRAME2, ничего не происходит. Затем, когда мы возвращаемся к FRAME1, происходит отправка, и это всегда работает нормально.

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

Я провел много отладки:

  • Это работает должным образом в IE6 на XP.
  • Я знаю, что процедура отправки на самом деле вызывается, потому что я помещаю вызовы в консоль.войдите в систему, и она всегда вызывается
  • Если я установлю точку останова в строке отправки внутри отладчика IE и нажму F10, чтобы перейти через строку, отправка сработает. Однако, если я нажму F5, чтобы просто продолжить выполнение остальной части скрипта, это не сработает. Итак, может показаться, что это указывает на проблему с синхронизацией
  • Я ввел асинхронный вызов для выполнения отправки позже, но это не помогло
  • FRAME2.HTM генерируется встроенным некоторым кодом, и у него были некоторые проблемы с проверкой HTML. Я исправил их, и проблема все еще остается
  • В Firefox 3.6.8 иногда это работает, иногда нет. Я не разобрался, когда это работает, а когда нет.
  • Я запустил программу HTTP Analyzer, которая просматривает выходные данные IE и ничего не показывает из-за неправильной отправки. Он показывает правильный вывод для 2-й отправки, которая действительно работает. Когда я нажимаю клавишу F10, чтобы перейти к отправке (и это работает должным образом), ответ, который возвращается с сервера, усекается. Ответ от 2-й отправки (который также работает) является нормальным. На самом деле вы не заметили бы здесь ничего плохого, потому что 2-я отправка заменяет FRAME2, так что это не проблема. Но это может быть признаком того, что первая отправка усечена.
  • Я пробовал просмотр совместимости, но это не помогло
  • Я провел множество поисковых запросов в Google и не нашел ничего конкретного.

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

На самом деле это сводится к следующему: можем ли мы объединить эти множественные отправки вместе из одного пользовательского действия? В IE6 он годами работал нормально, но теперь он ломается в IE8.

Ответ №1:

в frame2.htm doSubmit() попробуйте это:

 function doSubmit()
{


  var frameId = document.getElementById('iframe_id');
    var frameWindow= frameId .contentWindow || frameId .contentDocument;

frameWindow.forms[0].submit();

}
  

Комментарии:

1. Спасибо за ответ, но это не помогло. Я использую фреймы, а не iframes. Я изменил ваше предложение на parent.document.getElementById(‘frameId’), и это не помогло. Кроме того, у меня нет никаких проблем с доступом к форме. Просто при вызове отправки ничего не происходит. Нет сообщений об ошибках или чего-либо еще.