Порядок событий:
keydown
keypress
submit
keyup
Таким образом, к тому времени, когда ваш обработчик keyup
был бы вызван, форма уже начала отправлять. Если action
формы - это page2.html
в локальной файловой системе, она будет перемещаться очень быстро и, вероятно, отойдет от страницы до вызова keyup
; установите action
на внешний сайт, с другой стороны, и keyup
успеет выстрелить.
Добавление второго поля ввода - это другая проблема: в этом случае форма вообще не отправляется. Любопытно, что браузеры отправляют форму, в которой есть только один вход и нет кнопки отправки, но отказываются отправлять форму с более чем одним вводом и без кнопки отправки. Это восходит к спецификации HTML 2.0:
Если в форме имеется только одно однострочное поле ввода текста, пользовательский агент должен принять Enter в этом поле в качестве запроса на отправку формы.
В HTML 2.0 не указывалось, следует ли принимать Enter для отправки формы при любых других обстоятельствах (кажется, что целью было только дублирование функциональности древнего элемента <isindex>
), но браузерами того времени похоже, что это означает, что ввод-отправка не должна происходить при наличии нескольких полей, но любая кнопка отправки в любом случае вызывает ввод-отправку. IE и другие более поздние браузеры скопировали это странное поведение.
Несвязанный момент: опора на window.event
делает код ненужным только для IE. Для всех других браузеров объект события передается в качестве аргумента функции-обработчику события. Вы можете сделать onkeyup="detectEvent(event)"
в HTML, а затем использовать этот аргумент в функции detectEvent
, которая работает в обеих моделях, потому что используется либо локальный аргумент event
, либо глобальный window.event
. Но обычный подход состоит в том, чтобы потерять атрибут обработчика событий и назначить из JavaScript:
<form action="page2.html" id="enterform">
<p> Field1
<input type="text" id="text1">
<!-- Note: *no* trailing slash - the doctype says HTML4, not XHTML -->
</p>
</form>
<script type="text/javascript">
document.getElementById('enterform').onkeyup= function(event) {
if (event===undefined) event= window.event; // for IE
if (event.keyCode===13)
alert('You pressed Enter');
};
</script>
Сказав все это ... я обычно с подозрением отлавливаю клавишу Enter. Я не совсем уверен, что вы пытаетесь сделать, но если это обычный случай изменения кнопки по умолчанию в форме, это определенно не способ сделать это и вызовет множество проблем. Нет веской причины, по которой вы должны удерживать клавишу Enter для вызова .submit()
в форме.