【问题标题】:IE 11 cannot submit an HTML formIE 11 无法提交 HTML 表单
【发布时间】:2014-01-10 12:07:45
【问题描述】:

我有这个 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 动态获取值。当它得到一个值时,我会提醒它并且它可以工作。

但是,当我单击Lets Go 按钮时,什么也没有发生。我看到 Internet Explorer 加载了几分钟,然后我收到消息“网页没有响应”。如果我点击刷新,它会转到anotherpage.php,但表单中的值没有到达服务器。

很少显示此消息:

Visual Studio 即时调试器

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(); 编辑代码,问题仍然存在。

是我吗?它是一个错误吗?我错过了什么?

【问题讨论】:

  • 为什么在提交输入中需要一个值?
  • @w3jimmy 这是用户看到的文本的“名称”。它可以是“下载”或“返回”。你建议我删除它?
  • 如果您看到,您的页面实际上会发布,所以问题似乎不在于按钮本身。重定向页面可能有问题吗?
  • 既然你没有上传文件,不妨试试不带 enctype="multipart/form-data"?
  • 根据描述,问题很可能出在anotherpage.php,将您的表单发布到另一个(最好是空的)页面,看看它是否也一样。同时发布anotherpage.php 的代码也会有所帮助。

标签: javascript html forms internet-explorer internet-explorer-11


【解决方案1】:

我认为这是在 IE 中将表单值设置为空时的错误。

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

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

【讨论】:

  • 你能提供一些关于这个的背景,也许你对这种方法的想法?我查看了与错误报告一起发布的解决方法,但无法实施,因为我没有使用 jQuery。为我在表单中输入数据时 IE11 崩溃 - 我认为它与自动建议有关,但无法为此进行调试。
  • @Andrew 是的,与您提到的那个错误有关。我在那里尝试了解决方法,并为我工作。我的原始代码有一个超过 5 个字段的表单。提交时调用save()。该函数还使用 JS 清除字段。该表单中的错误使nextform 表单和浏览器崩溃。我为没有发布我所有的代码而道歉,我不知道这与第一种形式有关。我没有问同样的问题两次。因为我认为相同的代码有两个不同的问题。原来,这是同样的问题。我先问了这个。无论如何,谢谢
  • 不用担心@slevin,它只是让我感到困惑,因为它看起来好像你在问同样的问题。很高兴该解决方法对您有所帮助。
【解决方案2】:

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

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

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

【讨论】:

  • 不错的建议,但没有任何改变。问题依然存在
  • 正如我所说,“也许不是你的问题”,这只是建议。
  • 我知道,再次感谢您的光临。我已经尝试了一切。改变JS的结构,用GET代替POST。把我逼疯了,解决不了。也许还有其他建议?什么都会做。我不能让它工作。
【解决方案3】:

嗨,您的代码中可能存在问题,您错过了在表单中添加 id 并且您尝试通过您未定义的 id 访问表单。

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

这是必需的

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

...
...
...

</form>

【讨论】:

    【解决方案4】:

    跟踪 anotherpage.php 页面在收到回发时发生的情况,evt.data 可能未按预期编码(是二进制还是文本,如果是文本,是 utf-8)。

    回发到一个不同的页面,它所做的只是输出回发的值。

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

     so.close();
    

    【讨论】:

      【解决方案5】:

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

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

      该错误使第一个表单崩溃,然后是nextform 表单和浏览器。我为没有发布我所有的代码而道歉,我不知道这与第一种形式有关。

      因为我认为同一段代码有两个不同的问题,所以我发布了另一个问题,非常相似,here

      【讨论】:

        【解决方案6】:

        在我的例子中,输入按钮具有相同的 ID 和 NAME。因此,您可以检查它们是否相同,如果它们确实相同,请为其中一个参数使用不同的值。

        我希望它有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-14
          • 1970-01-01
          • 1970-01-01
          • 2016-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多