在按下键盘后,聚焦于字段而不插入字符。

5

我有一个快捷键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">


event.preventDefault(); - Johannes Jander
4个回答

4
您可以使用event.preventDefault()来停止事件的标准行为。但请注意,这将阻止字母K能够在input中输入。为了允许它,您需要在input本身上添加一个keydown处理程序,以阻止事件传播到达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">


1
没问题,很高兴能帮忙。我刚刚更新了我的答案,因为我意识到这种方法会阻止你在字段本身中输入“K”。 - Rory McCrossan
有一个小问题。当我聚焦在输入框上并输入一些数据时,我需要监听回车键的按下事件。但是当我使用stopPropagation时它不起作用(按下回车键时没有任何反应)。DEMO https://jsfiddle.net/La1bxzx0/1/很抱歉这不是原始问题中的内容,因为我不知道我会遇到这样的问题。 - Paran0a
1
在这种情况下,您需要添加一个条件来允许回车键按下传播,就像这样:https://jsfiddle.net/RoryMcCrossan/La1bxzx0/2/ - Rory McCrossan

4
这是另一种方法:
在按键按下时,如果按键是 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">


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. 如果输入框已经聚焦了,就不要再次聚焦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接