我写了一些Javascript以允许编辑HTML表单中的项目列表,包括添加和删除项目。知道它在Firefox中工作。在Internet Explorer中尝试它时,我发现任何添加的项目都没有与表单一起提交。IE没有提交;动态添加表单元素;这是一个IE错误?
长篇小说简短...大量简化,调试,找出哪些行触发IE忽略新的表单输入。所以行为问题解决了。
但现在我必须问:为什么?这是一个IE错误?
下面是简化的代码:
<html>
<head>
<title>Test</title>
<script type="text/javascript">
function add() {
div = document.getElementById("mylist");
// *** Adding text here works perfectly fine. ***
div.innerHTML += " ";
e = document.createElement("input");
e.setAttribute("type", "text");
e.setAttribute("name", "field3");
e.setAttribute("value", "--NEWVALUE--");
div.appendChild(e);
// *** Adding text here works perfectly fine in Firefox, but for
// Internet Explorer it causes field3 to not be submitted. ***
//div.innerHTML += " ";
}
</script>
</head>
<body>
<form action="" method="get">
<div id="mylist">
<input type="text" name="field1" value="value1" />
<input type="text" name="field2" value="value2" />
</div>
<a href="javascript:" onclick="add()" />Add</a>
<input type="submit" value="Submit" />
</form>
</body>
</html>
要尝试一下,做明显的:负载在IE中,点击添加,点击提交,看看有什么在地址栏中。如果您取消注释add()
中的最后一行,IE将突然停止报告field3
。它可以在Firefox中正常工作。
任何想法?一个好奇的头脑想知道。 (以及如何在需要时添加文本,以便携式方式,因此IE很高兴?)
1上避免的setAttribute。 -1的createElement-with-markup调用,这是一个非常丑陋的IE浏览器只有黑客。 – bobince 2009-03-04 19:22:18
我同意这是一个黑客 - 这就是为什么我建议海报先尝试设置属性。如果这不起作用,我看不到另一种方式来实现他想要发生的事情。 – levik 2009-03-04 19:36:03