2016-01-12 3 views
4

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

$(document).keydown(function(event) { 
 
    if (event.which == 75) { 
 
     $('input').focus(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<input type="text">

+0

'event.preventDefault();' –

ответ

3

Вы можете использовать event.preventDefault(), чтобы остановить стандартное поведение события. Обратите внимание, однако, что это остановит письмо K от того, чтобы его можно было ввести в input. Чтобы разрешить вам добавить обработчик keydown самому input, который останавливает распространение события до document. Попробуйте это:

$(document).keydown(function(event) { 
 
    if (event.which == 75) { 
 
    event.preventDefault(); 
 
    $('input').focus(); 
 
    } 
 
}); 
 

 
$('input').keydown(function(e) { 
 
    e.stopPropagation(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<input type="text">

+0

Большое спасибо! – Paran0a

+1

Без проблем, рад помочь. Я просто обновил свой ответ для вас, поскольку понял, что этот метод не позволяет вам вводить 'K' в самом поле. –

+0

Вид вопрос стороны. Когда я фокусируюсь на своем поле ввода и записываю некоторые данные. Мне нужно также прослушать ввод keydown. Когда я останавливаюPropagation, он не работает (при нажатии кнопки ничего не происходит). DEMO https://jsfiddle.net/La1bxzx0/1/ Жаль, что этого не было в оригинальном вопросе, так как я не знал, что у меня может быть такая проблема. – Paran0a

1

Если вы хотите, чтобы резко остановить распространение, вы можете также использовать return false;:

$(document).keydown(function(event) { 
 
    if (event.which == 75) { 
 
    $('input').focus(); 
 
    return false; 
 
    } 
 
}); 
 
$('input').keydown(function(e) { 
 
    e.stopPropagation(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<input type="text">

0
var input = $('input'); 

$(document).on('keyup', function (e) { 
    if(input.is(':focus')){ 
    return; 
    } 
    if (e.which == 75) { 
     input.focus(); 
    } 
}); 
  1. Слушайте мероприятие keyup;
  2. Если вход уже сфокусирован, не фокусируйтесь снова.
1

Это еще один способ:

Во время KeyDown, если это k и вход не то внимание поведение по умолчанию, и передать фокус в текстовое поле.

$(document).keydown(function(event) { 
 
    if (event.which == 75 && !$('input').is(":focus")) { 
 
    event.preventDefault(); 
 
    $('input').focus(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<input type="text">

Смежные вопросы