Почему кнопка сброса в HTML-формах не сбрасывает скрытые поля? - PullRequest
11 голосов
/ 16 июня 2011

Я обнаружил нечто удивительное:

<html>
<head>
<script type="text/javascript">
function f()
{
document.getElementById("h").value++;
document.getElementById("x").value++;
}
</script>
</head>
<body>

<form>
<input type="hidden" name="hidden" id="h" value="5"/>
<input type="text" id="x" value="5"/>
<input name='clear' type='reset' id='clear' value='Clear'>
</form>

<button type="button" onclick="f()">Increment</button>
<button type="button" onclick="alert(document.getElementById('h').value)">Show hidden</button>

</body>
</html> 

Попытка сделать это в Firefox 4.0.1, нажатие кнопки очистки всегда сбрасывает ввод текста до 5, но никогда не сбрасывает скрытое поле .

Я (и другие) вообще не ожидал такого поведения: мы ожидали, что скрытое значение также будет сброшено!

Может ли кто-нибудь указать на документацию или спецификации, объясняющие, почему скрытый ввод по-разному обрабатывается кнопкой сброса?

Также приветствуются объяснения, почему такое поведение желательно.

Ответы [ 4 ]

15 голосов
/ 23 июня 2011

FWIW, я думаю, что я могу собрать полную историю из ответов и комментариев.

Обоснование использования: Кнопка очистки предназначена для очистки ввода пользователя, и поскольку скрытые вводыне доступен непосредственно пользователю, нет смысла позволять пользователю сбрасывать значение скрытого ввода.

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

6 голосов
/ 16 июня 2011

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

3 голосов
/ 16 июня 2011

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

Ваш Javascript изменяет DOM.Вы должны попытаться заменить кнопку RESET пользовательской кнопкой, которая вызывает Javascript, который выполняет две вещи:

  • обычно сбрасывается.
  • установите скрытое поле на 5.
0 голосов
/ 19 марта 2019

Я пришел сюда, потому что столкнулся с той же проблемой.Однако при дальнейшем рассмотрении это (обычно) очень желаемое поведение.

Скрытое поле чаще всего используется для хранения информации, которая была отправлена ​​сервером при загрузке страницы.

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

...