JQuery: Keyup, как я могу предотвратить поведение стрелки по умолчанию (вверх и вниз) и ввести клавишу? - PullRequest
14 голосов
/ 03 июня 2011

JavaScript (JQuery)

$('input').keyup(function(e)
{
    var code = e.keyCode ? e.keyCode : e.which;

    switch(code)
    {
        case 38:
        break;

        case 40:
        break;

        case 13:
        break;

        default:
        return;
     }
 });

HTML

<form method="post" action="/">
<input type="text" name="text" />
<button type="submit">Submit</button>
</form>

У меня 2 проблемы:

1) Каретка не должна двигаться, когда я нажимаю клавишу со стрелкой up .

Например, в Chrome, когда я нажимаю клавишу вверх, она перемещает каретку влево.Но у меня есть только эта проблема в Chrome.Он отлично работает в FF.

2) Когда я нажимаю клавишу enter , я не хочу, чтобы форма была отправлена.

Кстати, я хочу получитьэто работает с keyup , а не с keypress .

Буду признателен за любые идеи.Спасибо.

Ответы [ 5 ]

47 голосов
/ 03 июня 2011

Я не думаю, что вы можете preventDefault() (это то, что вам нужно использовать, чтобы запретить браузеру выполнять действие по умолчанию для клавиши) на событии keyup - это срабатывает после событие по умолчанию уже произошло. Подробнее см. на этой странице .

Если можете, рассмотрите возможность использования keydown.

Что касается остановки отправки формы, вы можете выполнить привязку к событиям submit и return false;, когда отправка не была инициирована кнопкой отправки (см. jQuery: как получить какая кнопка была нажата при отправке формы? , как это определить).

С другой стороны, вы также можете привязать к keypress для формы, и когда Enter нажата, отменить отправку таким же способом (непроверенный код):

$('form').keypress(function(e){
    if(e.which === 13){
        return false;
    }
});
0 голосов
/ 28 августа 2012

Кажется, что вы на самом деле МОЖЕТЕ остановить значение по умолчанию для 'ENTER' при использовании keyup (); ... jQuery api пишет об этом здесь: http://api.jquery.com/keyup/

Вот как вы должны это сделать:

$('textarea').keyup(function(e) {
   // your code here
}).keydown(function(e){
   // your e.which for ENTER.
});
0 голосов
/ 03 июня 2011

Самый надежный метод - это комбинация e.preventDefault(), e.stopPropagation() и return false;

. Вот как это может выглядеть:После отправки формы с ключом ввода вам необходимо проверить событие submit формы:

$('#form').submit(function(e){
  var code = e.keyCode ? e.keyCode : e.which;

  if ($.inArray(code, override_keys)) {
    return false;
  }
});
0 голосов
/ 03 июня 2011

Чтобы предотвратить отправку формы при нажатии пользователем кнопки ввода, необходимо связать функцию отправки формы и вернуть значение false, если триггер события был нажатием кнопки ввода.

для нажатия кнопки вверх / вниз, используйте e.preventDefault();

0 голосов
/ 03 июня 2011

Вместо прерывания вы можете попробовать вернуть false или заставить его вызвать функцию и использовать http://api.jquery.com/event.preventDefault/

Например: case 40: function(e) {e.preventDefault;}

Кроме того, $('form').submit(function() {return false}); вообще прекратит подачу заявок, но я не уверен, что это то, что вам нужно?

...