$('.input').keypress(function (e) {
if (e.which == 13) {
$('form#login').submit();
return false; //<---- Add this line
}
});
ПРИМЕЧАНИЕ. Вы приняли ответ от bendewey, но он неверен в описании e.preventDefault (). Проверьте этот ответ stackoverflow: event.preventDefault () vs. return false
По существу, «return false» совпадает с именем e.preventDefault
и e.stopPropagation()
.
Теперь я использую
$("form").submit(function(event)
Сначала я добавил обработчик событий к кнопке отправки, которая вызвала ошибку для меня.
Это мой код:
$("#txtMessage").on( "keypress", function(event) {
if (event.which == 13 && !event.shiftKey) {
event.preventDefault();
$("#frSendMessage").submit();
}
});
Верните false
, чтобы предотвратить нажатие клавиши.
Вы также можете просто добавить onsubmit="return false"
к коду формы на странице, чтобы предотвратить поведение по умолчанию.
Затем переместите (.bind
или .live
) событие формы submit
в любое функция с jQuery в файле javascript.
Вот пример кода, который поможет:
HTML
<form id="search_form" onsubmit="return false">
<input type="text" id="search_field"/>
<input type="button" id="search_btn" value="SEARCH"/>
</form>
Javascript + jQuery
$(document).ready(function() {
$('#search_form').live("submit", function() {
any_function()
});
});
Работает с 2011-04-13, с Firefox 4.0 и jQuery 1.4.3
Просто добавление для простой реализации. Вы можете просто создать форму, а затем сделать кнопку отправки скрытой:
Например:
<form action="submit.php" method="post">
Name : <input type="text" name="test">
<input type="submit" style="display: none;">
</form>
Не знаю, поможет ли это, но вы можете попробовать имитировать нажатие кнопки отправки, а не напрямую отправлять форму. У меня есть следующий код в производстве, и он отлично работает:
$('.input').keypress(function(e) {
if(e.which == 13) {
jQuery(this).blur();
jQuery('#submit').focus().click();
}
});
Примечание: jQuery ('# submit'). Focus () заставляет кнопку анимировать кнопку при нажатии.
Также для обеспечения доступности вы должны использовать это, чтобы определить свой код:
c = e.which ? e.which : e.keyCode;
if (c == 13) ...
В кодах HTML:
<form action="POST" onsubmit="ajax_submit();return false;">
<b>First Name:</b> <input type="text" name="firstname" id="firstname">
<br>
<b>Last Name:</b> <input type="text" name="lastname" id="lastname">
<br>
<input type="submit" name="send" onclick="ajax_submit();">
</form>
В Js-кодах:
function ajax_submit()
{
$.ajax({
url: "submit.php",
type: "POST",
data: {
firstname: $("#firstname").val(),
lastname: $("#lastname").val()
},
dataType: "JSON",
success: function (jsonStr) {
// another codes when result is success
}
});
}
Попробуйте следующее:
var form = document.formname;
if($(form).length > 0)
{
$(form).keypress(function (e){
code = e.keyCode ? e.keyCode : e.which;
if(code.toString() == 13)
{
formsubmit();
}
})
}
Сегодня я обнаружил, что событие нажатия клавиши не запускается при нажатии клавиши 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)
Вы видите, что во второй последовательности «keypress» отсутствует, но регистр нажатия клавиш и keyup код '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.
Проверено на IE11 и FF61 на сервере 2012 R2
В дополнение к возврату false, как упоминал Джейсон Коэн. Возможно, вам также необходимо предотвратитьDefault
e.preventDefault();
Вот способ сделать это как плагин JQuery (в случае, если вы хотите повторно использовать функциональность):
$.fn.onEnterKey =
function( closure ) {
$(this).keypress(
function( event ) {
var code = event.keyCode ? event.keyCode : event.which;
if (code == 13) {
closure();
return false;
}
} );
}
Теперь, если вы хотите украсить этот тип функциональности, это как просто как это:
$('#your-input-id').onEnterKey(
function() {
// Do stuff here
} );
Есть ли причина, по которой вам нужно перехватывать и проверять ключ ввода?
Не могли бы вы просто добавить в форму форму
<input type="submit" />
и отправить ее, естественно, при вводе ввода? Вы могли бы даже тогда зацепить действие onsubmit
формы и вызвать функцию проверки оттуда, если хотите ...
Вы даже можете использовать onsubmit
в качестве теста, чтобы посмотреть, отправляется ли ваша форма , но это не сработает, если вы назовете form.submit()
.