在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 == true
和keyCode == 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/ 。