JavaScript: Истинная форма сбрасывается для скрытых полей

К сожалению, form.reset () функция не сбрасывает скрытые исходные данные формы. Зарегистрированный FF3 и Хром.

У кого-либо есть идея, как сделать сброс для скрытых полей также?

23
задан Govind Samrow 1 August 2018 в 10:20
поделиться

4 ответа

Кажется, что самый простой способ сделать это - иметь display: none текстовое поле вместо скрытого поля. При этом процесс сброса по умолчанию происходит регулярно.

26
ответ дан 29 November 2019 в 01:32
поделиться

Создайте кнопку и добавьте JavaScript в событие onClick , которое очищает поля.

Тем не менее, мне любопытно, почему вы хотите сбросить эти поля. Обычно они содержат внутренние данные. Если бы я очистил их в своем коде, публикация формы завершилась бы ошибкой (например, после того, как пользователь ввел новые данные и попытается отправить форму).

[EDIT] Я неправильно понял ваш вопрос. Если вас беспокоит, что кто-то может изменить значения в скрытых полях, сбросить их невозможно. Например, вы можете вызвать reset () в форме, но не в поле формы.

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

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

0
ответ дан 29 November 2019 в 01:32
поделиться

К сожалению, это верно согласно стандарту . Плохая спец бородавка ИМО. Тем не менее 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; он не может быть создан сценарием во время готовности документа, потому что некоторые браузеры уже переопределят значение поля с помощью запомненного значения (от нажатия кнопки перезагрузки или возврата) к тому времени, когда выполняется код.

13
ответ дан 29 November 2019 в 01:32
поделиться

Я бы сделал это, поместив прослушиватель событий на событие изменения скрытого поля. В этой функции прослушивателя вы можете сохранить начальное значение в хранилище элементов DOM ( mootools , jquery ), а затем прослушать событие сброса формы, чтобы восстановить начальные значения, хранящиеся в скрытая форма хранения полей.

0
ответ дан 29 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: