2010-09-26 3 views
3

у меня есть что-то вроде этого в моем веб-форм:Является ли это ошибкой в ​​IE9 Beta?

<input type="hidden" name="myField" value="defaultValue" /> 

Позже, в некоторых Javascript, я перезаписать значение по умолчанию, прежде чем я отправить страницу на сервер.

var formField = document.getElementsByName("myField")[0]; 
formField.setAttribute("value", "myNewValue"); 
var form = document.getElementById("myForm"); 
form.submit(); 

Все браузеры (я тестировал этот код в течение многих лет в IE5-IE8, Firefox, Opera, Chrome, Safari, ...) посылают "myNewValue" на сервер. За исключением IE9: он отправляет «defaultValue». Что тут происходит? Я что-то упускаю?

Если я удалю атрибут «значение» из поля, он также работает в IE9. Он также работает в IE9, если я переключаюсь в режим рендеринга IE8.

Является ли это ошибкой или стандартом IE9, чем другие браузеры?

+0

Dupe of http://stackoverflow.com/questions/3724207/html-form-default-values-override-actual-values-at-post-time-in-internet-explorer – EricLaw

+0

Не есть ли кто-нибудь, кто получил это работать? Я только что оштрафовал, что единственная форма, которую мы имеем в одном проекте, имеет проблемы в IE9 с этим ... Я искал и cna не нашел никакой хорошей помощи для этого. – RickardP

ответ

0

Давид Дорвард выглядит корректно в отношении HTML4, но это, по-видимому, является нарушением целостности обратной совместимости, поэтому я ожидаю, что HTML5 будет описывать, что на самом деле делают браузеры. И кажется. В нем сказано следующее: (мой акцент)

Атрибут content value дает значение по умолчанию для входного элемента . Когда атрибут содержимого значения добавлено, установить или удалить, если флаг загрязнен ценность элемента управления является ложным, пользовательским агент должен установить значение элемента к значению значения атрибута контента, если существует одна или пустая строка в противном случае, а затем запускает текущую дезинфекцию значения алгоритм, если он определен.

См http://dev.w3.org/html5/spec/the-input-element.html#attr-input-value

Ваш сценарий ничего, что бы установить флаг грязного значение перед вызовом SetAttribute не описать, поэтому я считаю, что вызов SetAttribute следует установить свойство значения и браузер должен отправить myNewValue не defaultValue.

Так что да, я думаю, что это ошибка IE9 Beta.

+0

Итак, каков был бы правильный формат HTML 4 для установки значения содержимого? .value не делает трюк. Что мне нужно сделать, чтобы IE9 отправил myNewValue? Есть идеи? Спасибо, что выкопали это! – newtogit

2

Атрибут value определяется как установка initial value.

После того, как форма была загружена, поле будет иметь фактическое значение, установленное на его исходное значение.

Насколько я знаю, нет ничего, что говорит о том, что текущее значение должно измениться, если начальное значение изменилось после загрузки формы, поэтому я подозреваю, что это исправление ошибки, а не новая ошибка.

Используйте свойство value вместо метода setAttribute.

+0

Вы говорите мне, что formField.значение устанавливает текущее значение, а formfield.setAttribute («значение») пытается перезаписать начальное значение? Итак, IE9 получил это прямо сейчас, и все другие браузеры делают это неправильно? – newtogit

+0

@newtogit: На самом деле, как много вещей в IE9 случается сейчас. Да, это немного странно, если вы рассматриваете историю IE. – Esko

+0

Это выглядит так. В спецификации может быть что-то, чтобы сказать, что это должно быть иначе, но я не видел его (и не уходил с моего пути, чтобы искать его, хотя). – Quentin

Смежные вопросы