У меня есть стандартная форма входа в систему - текстовое поле электронной почты, поле пароля и кнопка отправки в проекте AIR, использующем HTML / jQuery. Когда я нажимаю Enter в форме, все содержимое формы исчезает, но форма не отправляется. Кто-нибудь знает, является ли это проблемой Webkit (Adobe AIR использует Webkit для HTML), или я что-то перепутал?
Но это не остановило очистку и не отправило форму. С формой не связано никаких действий - может быть, в этом проблема? Могу ли я включить в действие функцию javascript?
У вас действительно есть атрибут class = input на вашем ‹input ...? Похоже, это должно быть $ ('input'). Keypress ... NexusRex 10.01.2012
Классы программно генерируются CMS. Однако, кроме этого, привязка его к $ ('input') повлияет на каждый ввод на странице, независимо от того, хочу я этого поведения или нет. Извините, это оскорбляет вашу чувствительность. b. e. hollenbeck 16.02.2012
Чувства нисколько не обиделись. Просто подумал, что это могло быть оплошностью, которая привела к проблеме. Продолжать. NexusRex 22.02.2012
К вашему сведению: ваш принятый ответ не совсем точен. Обратитесь к моему ответу ниже. NoBrainer 24.09.2012
По сути, "return false" - это то же самое, что и вызов e.preventDefault и e.stopPropagation().
Ответ 2 · рейтинг 174 · bendewey
В дополнение к возврату false, как упомянул Джейсон Коэн. Возможно, вам также придется предотвратить
e.preventDefault();
Ответ 3 · рейтинг 83 · karim79
Не знаю, поможет ли это, но вы можете попробовать имитировать нажатие кнопки отправки вместо непосредственной отправки формы. У меня в производстве есть следующий код, и он отлично работает:
Примечание. jQuery ('# submit'). Focus () делает кнопку анимированной при нажатии клавиши ввода.
Ответ 4 · рейтинг 61 · Jason Cohen
Верните false, чтобы нажатие клавиши не продолжалось.
Ответ 5 · рейтинг 30 · Zack The Human
Есть ли причина, по которой вам нужно подключать и проверять клавишу ввода?
Не могли бы вы просто добавить
<input type="submit" />
в вашу форму и будет ли она отправлена при нажатии кнопки ввода? Вы даже можете подключить действие формы onsubmit и вызвать оттуда функцию проверки, если хотите ...
Вы даже можете использовать onsubmit в качестве теста, чтобы увидеть, отправляется ли ваша форма, но это не сработает, если вы вызовете form.submit().
Ответ 6 · рейтинг 15 · bvaughn
Вот способ сделать это как плагин JQuery (на случай, если вы хотите повторно использовать эту функциональность):
Сначала я добавил обработчик событий к кнопке отправки, что вызвало у меня ошибку.
Ответ 12 · рейтинг 2 · Piemol
Сегодня я узнал, что событие нажатия клавиши не запускается при нажатии клавиши Enter, поэтому вы можете вместо этого переключиться на keydown () или keyup ().
Мой тестовый сценарий:
$('.module input').keydown(function (e) {
var keyCode = e.which;
console.log("keydown ("+keyCode+")")
if (keyCode == 13) {
console.log("enter");
return false;
}
});
$('.module input').keyup(function (e) {
var keyCode = e.which;
console.log("keyup ("+keyCode+")")
if (keyCode == 13) {
console.log("enter");
return false;
}
});
$('.module input').keypress(function (e) {
var keyCode = e.which;
console.log("keypress ("+keyCode+")");
if (keyCode == 13) {
console.log("Enter");
return false;
}
});
Вывод в консоли при вводе "A Enter B" на клавиатуре:
keydown (65)
keypress (97)
keyup (65)
keydown (13)
enter
keyup (13)
enter
keydown (66)
keypress (98)
keyup (66)
Вы видите, что во второй последовательности "нажатие клавиши" отсутствует, но нажатие / отпускание клавиш и код регистра "13" являются нажатыми / отпускаемыми. Согласно документации jQuery по функции keypress ():
Note: as the keypress event isn't covered by any official specification, the actual behavior encountered when using it may differ across browsers, browser versions, and platforms.