6

我有这样的HTML表单IE 11不能提交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刚刚在实时调试

未处理的win32异常在IEXPLORER.EXE [688]

可能发生的调试器:

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

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

+0

为什么你需要提交输入值? – w3jimmy

+0

@ w3jimmy这是用户看到的文本的“名称”。它可能是“下载”或“返回”。你建议我应该删除它? – slevin

+0

你的网页实际上发布了,如果你看到,所以问题似乎不是按钮本身。重定向页面可能有问题吗? – Kuzgun

回答

4

我相信这是在IE中将表单值设置为空时的一个错误。

我会建议您尝试使用不同的方法来重新设置表单值,我已经在过去使用这种方法:

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

你能提供一个关于这个的小环境,也许你在这个方法背后的想法?我查看了使用bug报告发布的解决方法,但无法实现,因为我没有使用jQuery。在为我输入数据时IE11崩溃 - 我认为它与自动建议有关,但无法进行调试。 –

+0

@Andrew是的,与你提到的那个bug有关。我尝试了解决方法,并为我工作。我原来的代码有一个超过5个字段的表单。提交时调用'save()'。该函数也清除使用JS的字段。该窗体中的错误会使'nextform'窗体和浏览器崩溃。我APOLOGIZE没有发布我的所有代码,我不知道它与第一种形式。我没有问过两次相同的问题。因为我认为相同的代码有两个不同的问题。原来,它是同样的问题。我首先问了这个问题。无论如何谢谢 – slevin

+0

不用担心@slevin,它让我感到困惑,因为它看起来好像你在问同样的问题。我很高兴解决方法已帮助您。 – Andy

4

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

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

给人一种表单控件的的名称提交将替代形式的提交法来控制的引用,因此调用form.submit()将尝试“调用“输入。

+0

好的建议,但没有改变。问题仍然存在 – slevin

+0

正如我所说的,“也许不是你的问题”,这只是建议。 – RobG

+0

我知道,并再次感谢您的时间。我已经尝试了一切。改变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

跟踪通过当它收到的回传,EVT在anotherpage.php页面会发生什么。数据可能不会按照您的预期进行编码(如果是文本,它是二进制文本还是文本,是utf-8)。

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

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

so.close(); 
0

我原来的代码有超过5个字段的形式。提交时致电save()save()函数还会清除使用JS的字段。

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

该错误崩溃的第一种形式,然后nextform窗体和浏览器。我APOLOGIZE没有发布我的所有代码,我不知道它与第一种形式。

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

0

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

我希望它有帮助。