Это правильно согласно стандарту , к сожалению. Плохая спецификация бородавки ИМО. Тем не менее, IE предоставляет скрытые поля с возможностью сброса defaultValue
. См. это обсуждение : в HTML5 оно (увы) не изменится.
(К счастью, редко возникает необходимость сброса формы. Как функция пользовательского интерфейса, она обычно не одобряется.)
Поскольку вы вообще не можете получить исходное значение атрибута value
, вам придется продублировать его в другом атрибуте и извлечь его. eg.:
<form id="f">
<input type="hidden" name="foo" value="bar" class="value=bar"/>
function resetForm() {
var f= document.getElementById('f');
f.reset();
f.elements.foo.value= Element_getClassValue(f.elements.foo, 'value');
}
function Element_getClassValue(el, classname) {
var prefix= classname+'=';
var classes= el.className.split(/\s+/);
for (var i= classes.length; i-->0;)
if (classes[i].substring(0, prefix.length)===prefix)
return classes[i].substring(prefix.length);
return '';
}
Альтернативные способы контрабанды этого значения могут включать HTML5 data
, другой резервный атрибут, такой как title
, сразу следующий <!-- comment -->
для чтения значения, явную дополнительную информацию JS или дополнительные скрытые поля для хранения значения по умолчанию.
Каким бы ни был подход, он должен был бы загромождать HTML; он не может быть создан сценарием во время готовности документа, потому что некоторые браузеры к тому времени уже выполнят переопределение значения поля запомненным значением (после перезагрузки или нажатия кнопки назад).