#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’), и это не помогло. Кроме того, у меня нет никаких проблем с доступом к форме. Просто при вызове отправки ничего не происходит. Нет сообщений об ошибках или чего-либо еще.