Запретить "Enter" отправлять форму, но разрешить ее в полях textarea (jQuery)
$(window).keydown(function(event){
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
});
Выше приведен код, который я фактически убил ключом ввода в качестве отправителя формы во всей системе, и это именно то, что мне нужно. Однако клавиша ввода также отключена для тегов textarea, которые пользователи должны иметь возможность вводить, чтобы перейти к следующим строкам. Итак, есть ли способ изменить приведенный выше код, чтобы он обнаружил, что если ввод идет из тега textarea, он не запускает event.preventDefault(); линия?
У меня так много форм по всему сайту - их индивидуальная настройка была бы кошмаром, и, вероятно, не имеет смысла - должен быть универсальный способ. Приведенный выше код запускается на каждой странице сайта, чтобы предотвратить случайную отправку, нажав "enter". enter code here
7 ответов
Я бы предпочел keyup
событие... использовать event.target
имущество
$(window).keydown(function(event){
if((event.which== 13) && ($(event.target)[0]!=$("textarea")[0])) {
event.preventDefault();
return false;
}
});
демонстрация
Вы можете попробовать это
$(document).ready(function(){
$(window).keydown(function(event){
if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA')
{
event.preventDefault();
return false;
}
});
});
Скрипка здесь.
Решение @3nigma будет работать просто отлично, но здесь есть еще один способ добиться такого поведения:
$(function(){
$('#myform').find('input,select').keydown(function(event){
if ( event.keyCode == 13 ){
event.preventDefault();
}
});
});
$('#form_editar').keypress(function(e) {
var allowEnter = {"textarea": true, "div": true};
var nodeName = e.target.nodeName.toLowerCase();
if (e.keyCode == 13 && allowEnter[nodeName] !== true) {
e.preventDefault();
}
});
Я немного редактирую из @The Alpha, я использую div для wysiwyg редакторов:)...
Это кажется хорошей возможностью использовать объект события и подобный скальпелю подход к этому москиту вместо подобного пушке подхода.
Другими словами, что-то вроде этого:
...
// Only watch for a bad type of submission when a submission is requested.
$('form .contact-form').submit(function(e){
// If a submit is requested, and it's done via keyboard enter, stop it.
if ((e.keyCode || e.which) == 13) ? ;){ // Try to use normalized enter key code
e.preventDefault(); // Prevent the submit.
}
// All other mouse actions just go through.
});
Преимущество здесь должно быть относительно очевидным, если вы нажмете Enter, где не отправляете форму, этот код не знает, не заботится, не вызывает проблем.
Я нашел это работает лучше всего. Особенно, если вы хотите использовать поведение клавиш ввода в других элементах, чтобы не отправлять форму обратно. Я просто расширяю ответ 3nigma.
$("form").keypress(function (event) {
if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) {
return false;
}
});
Почему бы просто не заблокировать форму submit
событие от запуска вместо?
$('form').submit(function(event){
event.preventDefault();
});