Почему кнопка сброса в html-формах не сбрасывает скрытые поля?

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

<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, щелчок clear всегда сбрасывает ввод текста в 5, а никогда не сбрасывает скрытое поле.

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

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

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

3 ответов


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

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

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


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


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

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

  • нормально сбросить.
  • установить скрытое поле 5.