在keyup事件中检测Ctrl + A.

时间:2015-08-10 06:21:24

标签: javascript jquery

我想在输入中检测 Control + A 事件。我可以找到 Control + A 事件,但即使在return false之后该功能仍在继续。

jsFiddle - http://jsfiddle.net/f6rcgpmh/4/

$('.searchTerm').keyup(function(e) {

    $("#status").text("");

    if (e.ctrlKey) {
        if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a'
            console.log("Control pressed");
            e.preventDefault();
            return false;
        }
    }
    $("#status").text("This should not work if Ctrl + A is pressed");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="search" class="search">
    <input class="searchTerm" placeholder="Filter Books...">
    <input class="searchButton" type="submit">
</form>
<div id="status"></div>

我希望这可以在keyup而非keydown中使用。因为我使用自动搜索,我不想在keyrelease之前调用函数。并且 Ctrl + A 在返回false时不会突出显示keydown中的文本。

2 个答案:

答案 0 :(得分:16)

实际上该功能停止了。您遇到的是两个键盘事件触发:来自 ctrl 的一个和来自 A 的事件。

第一个按预期返回,因为它符合要求:ctrlKey == truekeyCode == 65 || keyCode == 97

但是第二个,只会按下一个键,因此两个语句不能同时出现:

  • 如果您上次发布 ctrl ,则ctrlKey为真,但keyCode == 65 || keyCode == 97不是。

  • 如果您上次发布 A ,则ctrlKey现在为假。

然后运行将#status设置为错误消息的行。

答案 1 :(得分:5)

实际上并非如此。您必须将活动从'keyup'更改为'keydown'。然后再试一次。你可以检查这个小提琴。 http://jsfiddle.net/ebilgin/f6rcgpmh/5/

如果您需要控制自动完成功能,则必须在发送数据之前放置控件。

Ctrl键盘事件触发器会导致您的问题。我在你的代码中添加了另一个条件,

if (e.keyCode == 17) // Ctrl key, fires at Ctrl's keyup.
    return false;

你可以检查我的新小提琴,http://jsfiddle.net/ebilgin/f6rcgpmh/10/