我想在输入中检测 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中的文本。
答案 0 :(得分:16)
实际上该功能停止了。您遇到的是两个键盘事件触发:来自 ctrl 的一个和来自 A 的事件。
第一个按预期返回,因为它符合要求:ctrlKey == true
和keyCode == 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/。