Я написал несколько 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
Я согласен с тем, что это взлом - вот почему я предлагаю, чтобы плакат попытался установить свойства в первую очередь. Если это не сработает, я не вижу другого способа сделать то, что он хочет. – levik