使用jQuery,为什么当我只点击两个键之一时调用这个函数?
Using jQuery, why is this function being called when I only click one of the two keys?
我有这个代码:
$(document).bind('keydown', 'ctrl+1', function () {
alert('You found the hotkey ctrl+1!');
});
但是如果我点击 Ctrl 或 1 键,这段代码似乎火了。我只希望在按下 两个 键时触发此代码。
我错过了什么?
直接使用jQuery事件而不是绑定。使用事件对象的 ctrlKey
属性 可以知道是否按下了 Ctrl。
$(document).keydown("1", function(e){
if(e.ctrlKey)
alert("Ctrl+1 pressed");
});
它没有经过测试,但我想它应该可以工作。
正如你在documentation中看到的,bind
函数的第二个参数是eventData
,也就是
An object containing data that will be passed to the event handler.
这用于从用作处理程序的内部函数外部访问变量,以避免从闭包访问可变变量时出现问题。
如果您想过滤触发操作的键,只需在函数内部处理即可。
$(document).bind("keydown", function(ev){ // notice the function argument
if(ev.ctrlKey && ev.keyCode == 49){ // 49 being the keyCode for "1"
alert("Foo!");
}
});
您可以直接使用jQuery的keydown功能,查看按下的键。
$('body').keydown(function (e){
if (e.ctrlKey && e.keyCode == 49)
alert("Ctrl+1 pressed");
});
利用jQuery hotKeys。它会让你的生活更轻松。您将能够执行以下操作:
$(document).bind('keydown', 'ctrl+1', function () {
alert('You found the hotkey ctrl+1!');
});
另一个库是 Mouse trap。它可以让您执行以下操作:
Mousetrap.bind('command+shift+k', function(e) {
highlight([6, 7, 8, 9]);
return false;
});
每次按键时都会调用此函数,但我已经检查了某个条件下的键码。我们可以在“if 条件”中实现所需的功能。只有当 Ctrl 键和 1 被按下时,条件才会执行。
$(document).on('keydown', 'body', function(event) {
if (event.ctrlKey && event.keyCode == 49) {
alert("Ctrl+1 pressed");
}
});
您需要检查 keydown 事件以及 Ctrl 键是否被按下
$(document).keydown('1', function(e) {
if (e.ctrlKey) {
alert('Ctrl 1 was pressed.');
}
});
为了澄清你的问题,你错过了检查 ctrl 事件。
使用:
document.body.addEventListener('keypress', function (event) {
var key = event.which || event.keyCode;
if(key.ctrlKey && key == 49) {
alert("Ctrl+1 pressed);
}
}
这应该有所帮助。您将事件 listener 添加到 HTML 代码的 body 并监听哪个键被按下。
$(document).ready(function () {
document.body.addEventListener('keypress', function (event) {
var key = event.which || event.keyCode;
if (key.ctrlKey || key == 49) {
alert("Ctrl+1 pressed");
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<p>empty page</p>
</body>
</html>
关键字“+”成为 CSS 选择器。它不是键盘事件(keydown、keypress 和 keyup)的侦听器。
在这种情况下,您不需要 CSS 选择器来检测键。这个魔法对应一个事件,因此有一个接收事件的函数...function(event)或者function(e).该参数包含您需要的一切。
现在事件通过 属性 "which" 或 属性 "keyCode" 来标识密钥。这里有点复杂,因为哪个和keycode,取决于浏览器支持。
现在,也许必须检查 jQuery 页面上的 keydown 事件,观察第 41 行,以及按键时的结果,特别是 keycode 和 which 属性。
最后,目标正在同时检测到 Ctrl 键和另一个键。重要的是要知道它是一个特殊的键,必须用 ctrlKey 替换哪个数字并用 属性 which 或 keyCode.
评估数字。
jQuery link 到 keydown 和让你知道你按下的键号(哪个或键码)的例子是 here.
您的代码最终将如下所示:
$(document).bind('keydown', function (e) {
if((e.crtlKey && (e.which == 49)) || (e.crtlKey && (e.which == 97))) {
alert('You found the hotkey ctrl+1!');
}
});
代码中的数字49对应字母键盘部分的数字="1"。
数字97对应数字键盘部分的数字="1"
你做错了。当你按下一个键时,key down 事件会触发,它不关心你是否按下了另一个键。请使用 keyup 事件。
$(document).bind('keyup', 'ctrl+1', function () {
alert('You found the hotkey ctrl+1!');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
试试这个:
$(document).keypress("1",function(e) {
if(e.ctrlKey)
alert("You found the hotkey ctrl+1!");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<p>Press CTRL+1 to show alert.</p>
更多信息here。
我有这个代码:
$(document).bind('keydown', 'ctrl+1', function () {
alert('You found the hotkey ctrl+1!');
});
但是如果我点击 Ctrl 或 1 键,这段代码似乎火了。我只希望在按下 两个 键时触发此代码。
我错过了什么?
直接使用jQuery事件而不是绑定。使用事件对象的 ctrlKey
属性 可以知道是否按下了 Ctrl。
$(document).keydown("1", function(e){
if(e.ctrlKey)
alert("Ctrl+1 pressed");
});
它没有经过测试,但我想它应该可以工作。
正如你在documentation中看到的,bind
函数的第二个参数是eventData
,也就是
An object containing data that will be passed to the event handler.
这用于从用作处理程序的内部函数外部访问变量,以避免从闭包访问可变变量时出现问题。
如果您想过滤触发操作的键,只需在函数内部处理即可。
$(document).bind("keydown", function(ev){ // notice the function argument
if(ev.ctrlKey && ev.keyCode == 49){ // 49 being the keyCode for "1"
alert("Foo!");
}
});
您可以直接使用jQuery的keydown功能,查看按下的键。
$('body').keydown(function (e){
if (e.ctrlKey && e.keyCode == 49)
alert("Ctrl+1 pressed");
});
利用jQuery hotKeys。它会让你的生活更轻松。您将能够执行以下操作:
$(document).bind('keydown', 'ctrl+1', function () {
alert('You found the hotkey ctrl+1!');
});
另一个库是 Mouse trap。它可以让您执行以下操作:
Mousetrap.bind('command+shift+k', function(e) {
highlight([6, 7, 8, 9]);
return false;
});
每次按键时都会调用此函数,但我已经检查了某个条件下的键码。我们可以在“if 条件”中实现所需的功能。只有当 Ctrl 键和 1 被按下时,条件才会执行。
$(document).on('keydown', 'body', function(event) {
if (event.ctrlKey && event.keyCode == 49) {
alert("Ctrl+1 pressed");
}
});
您需要检查 keydown 事件以及 Ctrl 键是否被按下
$(document).keydown('1', function(e) {
if (e.ctrlKey) {
alert('Ctrl 1 was pressed.');
}
});
为了澄清你的问题,你错过了检查 ctrl 事件。
使用:
document.body.addEventListener('keypress', function (event) {
var key = event.which || event.keyCode;
if(key.ctrlKey && key == 49) {
alert("Ctrl+1 pressed);
}
}
这应该有所帮助。您将事件 listener 添加到 HTML 代码的 body 并监听哪个键被按下。
$(document).ready(function () {
document.body.addEventListener('keypress', function (event) {
var key = event.which || event.keyCode;
if (key.ctrlKey || key == 49) {
alert("Ctrl+1 pressed");
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<p>empty page</p>
</body>
</html>
关键字“+”成为 CSS 选择器。它不是键盘事件(keydown、keypress 和 keyup)的侦听器。
在这种情况下,您不需要 CSS 选择器来检测键。这个魔法对应一个事件,因此有一个接收事件的函数...function(event)或者function(e).该参数包含您需要的一切。
现在事件通过 属性 "which" 或 属性 "keyCode" 来标识密钥。这里有点复杂,因为哪个和keycode,取决于浏览器支持。
现在,也许必须检查 jQuery 页面上的 keydown 事件,观察第 41 行,以及按键时的结果,特别是 keycode 和 which 属性。
最后,目标正在同时检测到 Ctrl 键和另一个键。重要的是要知道它是一个特殊的键,必须用 ctrlKey 替换哪个数字并用 属性 which 或 keyCode.
评估数字。jQuery link 到 keydown 和让你知道你按下的键号(哪个或键码)的例子是 here.
您的代码最终将如下所示:
$(document).bind('keydown', function (e) {
if((e.crtlKey && (e.which == 49)) || (e.crtlKey && (e.which == 97))) {
alert('You found the hotkey ctrl+1!');
}
});
代码中的数字49对应字母键盘部分的数字="1"。
数字97对应数字键盘部分的数字="1"
你做错了。当你按下一个键时,key down 事件会触发,它不关心你是否按下了另一个键。请使用 keyup 事件。
$(document).bind('keyup', 'ctrl+1', function () {
alert('You found the hotkey ctrl+1!');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
试试这个:
$(document).keypress("1",function(e) {
if(e.ctrlKey)
alert("You found the hotkey ctrl+1!");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<p>Press CTRL+1 to show alert.</p>
更多信息here。