К сожалению, form.reset () функция не сбрасывает скрытые исходные данные формы. Зарегистрированный FF3 и Хром.
У кого-либо есть идея, как сделать сброс для скрытых полей также?
Кажется, что самый простой способ сделать это - иметь display: none текстовое поле вместо скрытого поля. При этом процесс сброса по умолчанию происходит регулярно.
Создайте кнопку и добавьте JavaScript в событие onClick
, которое очищает поля.
Тем не менее, мне любопытно, почему вы хотите сбросить эти поля. Обычно они содержат внутренние данные. Если бы я очистил их в своем коде, публикация формы завершилась бы ошибкой (например, после того, как пользователь ввел новые данные и попытается отправить форму).
[EDIT] Я неправильно понял ваш вопрос. Если вас беспокоит, что кто-то может изменить значения в скрытых полях, сбросить их невозможно. Например, вы можете вызвать reset ()
в форме, но не в поле формы.
Вы могли подумать, что можете сохранить значения в файле JavaScript и использовать его для сброса значений, но когда пользователь может вмешаться в скрытые поля, он также может вмешаться в JavaScript.
Итак, с точки зрения безопасности, если вам нужно сбросить скрытые поля, избегайте их в первую очередь и сохраните информацию в сеансе на сервере.
К сожалению, это верно согласно стандарту . Плохая спец бородавка ИМО. Тем не менее IE предоставляет скрытые поля со сбрасываемым defaultValue
. См. это обсуждение : это (увы) не изменится в HTML5.
(К счастью, редко возникает необходимость сбрасывать форму. Как функция пользовательского интерфейса она обычно не одобряется.)
Поскольку вы не можете получить исходное значение атрибута value
вообще , вам нужно будет продублировать его в другом атрибуте и получить его. Например: [
<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
, другой запасной атрибут, например title
, следующий за ним
для чтения значения, явной дополнительной информации JS или дополнительных скрытых полей только для хранения значений по умолчанию.
При любом подходе он должен загромождать HTML; он не может быть создан сценарием во время готовности документа, потому что некоторые браузеры уже переопределят значение поля с помощью запомненного значения (от нажатия кнопки перезагрузки или возврата) к тому времени, когда выполняется код.
Я бы сделал это, поместив прослушиватель событий на событие изменения скрытого поля. В этой функции прослушивателя вы можете сохранить начальное значение в хранилище элементов DOM ( mootools , jquery ), а затем прослушать событие сброса формы, чтобы восстановить начальные значения, хранящиеся в скрытая форма хранения полей.