一个操作中的多个提交在Win7 64位的IE8中不起作用

时间:2011-04-14 18:02:53

标签: javascript internet-explorer-8 submit

我在一个页面上有2帧,其中frame1调用frame2上的Javascript方法。在第2帧中,我们做了一个不会发生的提交。当我们返回到frame1时,它会自己提交并且工作正常。两个提交都将POST数据发送到服务器。

FRAME1.HTM

function doSubmit(selectedTab)
{
    if (checkFieldsChanged() == true) 
       {
        ...
        if(selectedTab >= 0)
                    document.forms[0].action="WebDesk?op=dm&id=11097DETH000000&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=dm&id=11097DETH000000&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'/>

所以FRAME1的doSubmit由onclick处理程序调用,该处理程序调用checkFieldsChanged,它在FRAME2上执行doSubmit。当我们在FRAME2中调用submit时,没有任何反应。然后,当我们返回到FRAME1时,它会提交,并且总是正常工作。

我怀疑不允许将这两个提交链接在一起进行一次用户操作。或者,IE8不喜欢这个并且不允许它。

我做了很多调试:

  • 这在XP上的IE6中正常工作。
  • 我知道提交例程实际上是被调用的,因为我在它周围调用了console.log并且它总是被调用
  • 如果我在IE调试器内的提交行上设置断点并按F10跳过该行,则提交有效。但是,如果我按F5继续执行脚本的其余部分,则不起作用。所以,这似乎表明时间问题
  • 我进行了异步调用以便稍后进行提交,但这没有帮助
  • FRAME2.HTM是由某些代码内联生成的,它有一些HTML验证问题。我已经解决了这个问题,问题仍然存在
  • 在Firefox 3.6.8中,有时它可以工作,有时则不然。我还没弄清楚什么时候有效,什么时候没有。
  • 我运行了一个程序,HTTP Analyzer,它查看来自IE的输出,它显示出错误提交的任何内容。它显示了第二次提交的正确输出。当我执行F10以跳过提交(并且它正常工作)时,从服务器返回的响应将被截断。第二次提交的回复(也有效)是正常的。实际上你不会在这里发现任何错误,因为第二次提交取代了FRAME2,所以这不是问题。但这可能是第一次提交被截断的症状。
  • 我尝试过兼容性视图但没有帮助
  • 我已经完成了大量的谷歌搜索,并没有提出任何具体的建议。

我可以提供原始HTML,但我不想在这个已经很大的问题上添加更多内容。

它真的归结为:我们可以从一个用户动作链接这些多个提交吗?它在IE6上运行良好多年,但现在它在IE8上运行。

1 个答案:

答案 0 :(得分:0)

在frame2.htm中的

doSubmit()试试这个:

function doSubmit()
{


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

frameWindow.forms[0].submit();

}