IE 11无法提交HTML表单。

6
我有一个HTML表单。
<form name="nextform" action="anotherpage.php" method="post" enctype="multipart/form-data">
    <input name="pinid" id="pinid" type="hidden">
    <input type="submit" name="submit" id="post" value="Lets Go" class="formButtonMap">
</form>
pinid 动态获取了一个JavaScript的值。当它得到值时,我会弹出提示窗口,这个功能正常。
但是,当我点击 "Let's Go" 按钮时,没有任何反应。我看到 Internet Explorer 加载了几分钟,然后显示消息 “网页未响应”。如果我按下刷新按钮,它会跳转到 anotherpage.php 但表单中的值并没有传递给服务器。
很少会出现以下信息:

Visual Studio Just-In-Time Debugger

iexplorer.exe [688] 中发生未处理的 win32 异常

可能的调试器:

新 Microsoft Visual Studio 2012 实例

这种行为只在 Internet Explorer 11.0.2 中观察到。该表单可以在旧版本的Internet Explorer以及Chrome和Firefox中正常工作。在IE的控制台中没有错误信息。
以下是放置在表单上面的JavaScript代码:
// called when another button is clicked - basicaly is websockets
function save() {
    var so = new WebSocket("ws://localhost:8000");
    so.onerror = function (evt) {
        alert('problem');
    }

    if (sara == 'LINES') {
        so.onopen = function() {
            so.send(JSON.stringify({
                command: 'insertAll',
                name: document.getElementById('name').value
            }));
        }
    }

    if (sara == 'POLY') {
        so.onopen = function() {
            so.send(JSON.stringify({
                command: 'insertHalf',
                name: document.getElementById('name').value
            }));
        }
    }

    so.onmessage = function (evt) {
        var received_msg = evt.data;

        document.getElementById("next").style.display = "block";
        document.getElementById("name").value = "";
        document.getElementById("descr").value = "";
        clearLinks();

        document.getElementById("pinid").value = received_msg;
        alert(document.getElementById("pinid").value); // works

        so.close();
    }
}

我尝试使用 document.getElementById("nextform").submit(); 编辑代码,但问题仍然存在。

是我的问题吗?还是一个bug?我漏掉了什么?


为什么在提交输入中需要一个值? - w3jimmy
@w3jimmy 这是用户看到的“名称”。它可以是“下载”或“返回”。您建议我删除它吗? - slevin
如果您看到页面实际上已经发布,那么问题似乎不是按钮本身。重定向页面可能出了什么问题吗? - Kuzgun
由于您没有上传文件,也许可以尝试不使用enctype="multipart/form-data"吗? - adam0101
1
根据描述,问题很可能出现在anotherpage.php上,请将您的表单提交到另一个(最好是空白)页面,看看是否会出现相同的问题。此外,发布anotherpage.php的代码也会有所帮助。 - Rafael
你能把id="post"改成除了"post"以外的其他名称吗? - Grzegorz
6个回答

4

我认为在IE中将表单值设置为空时存在一个bug。

我建议尝试使用另一种重置表单值的方法,我过去使用过这种方法:

document.getElementById('name').parentNode.innerHTML = '';

你能提供一些背景信息和你采用这种方法的想法吗?我看了一下错误报告中发布的解决方法,但无法实现,因为我没有使用jQuery。对于我来说,当在表单中输入数据时,IE11会崩溃--我认为这与自动建议有关,但无法调试到此结束。 - J.D. Pace
@Andrew 是的,与你提到的那个bug有关。我尝试了那里的解决方法,并且对我有效。我的原始代码有一个表单,其中包含超过5个字段。提交后调用save()函数。该函数还使用JS清除字段。该表单中的bug会导致nextform表单和浏览器崩溃。非常抱歉我没有发布所有的代码,我不知道它与第一个表单有关。我并没有重复相同的问题。因为我以为相同的代码有两个不同的问题。结果证明,这是同一个问题。我首先问了这个问题。无论如何感谢。 - slevin
没关系@slevin,只是让我感到困惑,因为你似乎在问同样的问题。我很高兴这个解决方法对你有帮助。 - Andy

4

也许不是你遇到的问题,但是:

<input type="submit" name="submit" ... >

给表单控件命名为submit,将替换表单的submit方法为对该控件的引用,因此调用form.submit()将尝试“调用”该输入。

不错的建议,但是什么都没有改变。问题还在那里。 - slevin
就像我说的,“也许不是你的问题”,这只是建议。 - RobG
我知道,再次感谢您的时间。我已经尝试了所有方法。改变JS的结构,使用GET代替POST。让我发疯了,无法解决它。也许还有其他建议吗?任何建议都可以。我无法使其正常工作。 - slevin

3

你的代码可能存在问题,你没有在表单中添加id,并且你试图通过未定义的id访问表单。

document.getElementById("nextform").submit();

必须的

<form name="nextform" id="nextform" action="anotherpage.php" method="post" enctype="multipart/form-data">

...
...
...

</form>

0

当anotherpage.php页面接收到postback时,请跟踪发生的情况,evt.data可能没有按您预期进行编码(如果是文本,则为utf-8吗?)。

将postback发送到另一个页面,在该页面上仅输出已发布的值。

套接字关闭是否会抛出异常?

 so.close();

0

我的原始代码有一个包含5个以上字段的表单。当提交时调用save()函数。 save()函数还使用JS清除字段。

在IE11中存在一个错误,如果您尝试使用JS清除超过5个字段,则会导致浏览器崩溃。请参见此处,有解决方法。

该错误会导致第一个表单崩溃,然后是nextform表单和浏览器。我很抱歉没有发布所有代码,我不知道它与第一个表单有关。

由于我认为同一段代码存在两个不同的问题,因此我发布了另一个非常相似的问题,此处


0
在我的情况下,输入按钮具有相同的ID和名称。因此,您可以检查它们是否相同,如果确实相同,请为其中一个参数使用不同的值。
希望能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接