在keyup事件中检测Ctrl + A.

我想在输入中检测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"); }); 
   

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

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

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

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

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

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

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

实际上并非如此。 您必须将活动从'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/ 。