在keyup事件中检测Ctrl + A.

Vis*_*hnu 22 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");
});
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

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

Kai*_*ido 16

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

第一个按预期返回,因为它确实填满了要求:ctrlKey == truekeyCode == 65 || keyCode == 97.

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

  • 如果你上次发布了ctrl,那么ctrlKey是真的,但事实keyCode == 65 || keyCode == 97并非如此.

  • 如果你上次发布了A,那么ctrlKey现在是假的.

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

  • 这是正确的答案.我会写同样的,但是Kaiido更快. (4认同)

ebi*_*gin 5

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


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

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

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

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