启动/停止按键事件 jquery
Start / Stop keypress event jquery
我有问题。我想在按下 space 时停止按键事件,然后我想做一些事情,最后我需要 "restart" 这个功能。有可能吗?我该怎么做?
提前致谢
$(document).keypress(function(e) {
if(e.keyCode == 32)
// stop keypress function
// do something
// restart keypress function
}
尝试以下功能之一:
e.stopPropagation();
或
e.preventDefault();
完整代码:
$(document).keypress(function(e) {
if (e.keyCode == 32) {
e.preventDefault(); // e.stopPropagation();
}
})
我相信你有两个选择。
禁用处理程序:
$(document).on('keypress', function keypressHandler(e) {
//disable handler
$(document).off('keypress');
//do stuff
//enable keypress handler
$(document).on('keypress', keypressHandler);
});
使用标志:
var keyHandlerActive = true;
$(document).on('keypress', function(e) {
if (!keyHandlerActive) { return; }
keyHandlerActive = false;
//do stuff
keyHandlerActive = true;
});
嗯,你可以像这样玩,因为我为这两种情况添加了两个按钮,默认情况下 SPACE 将被禁用。请查看:
HTML
<input id="myinput" type="text">
<input id="space_flag" type="hidden" value="0">
<br/>
<input id="enable_space" type="button" value="Enable Space">
<br/>
<input id="disable_space" type="button" value="Disable Space">
JQuery
$(function(){
$("#myinput").keypress(function(event){
if(event.keyCode == 32 && $("#space_flag").val()==0){
return false;
}
});
$("#enable_space").click(function(event){
$("#space_flag").val(1);
});
$("#disable_space").click(function(event){
$("#space_flag").val(0);
});
});
你的关闭条件是space,但是没有提到重新开启的条件..所以我在下面使用了一个计时器..你可以随意改变它
要试用演示,
- 键入除 space 以外的任意键以查看它是否被记录
- 按 space 关闭 10 秒(或更改代码使其直到进程完成)
- 功能在 10 秒后开启
当按下 space 时,该功能将关闭(逻辑关闭,因为 bind/rebind 如果过度使用可能会变得很痛苦)10 秒。
var logicalOff = false;
$(document).keypress(function(e) {
if (logicalOff) { return true; } //well we just ignore and return until turned On
$('div').text(e.which);
if(e.which == 32) {
logicalOff = true; // stop keypress function
setTimeout(function () { // restart keypress function
logicalOff = false;
$('div').text("turned on now");
}, 10000);
$('div').text("turned off for 10 seconds");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
我有问题。我想在按下 space 时停止按键事件,然后我想做一些事情,最后我需要 "restart" 这个功能。有可能吗?我该怎么做?
提前致谢
$(document).keypress(function(e) {
if(e.keyCode == 32)
// stop keypress function
// do something
// restart keypress function
}
尝试以下功能之一:
e.stopPropagation();
或
e.preventDefault();
完整代码:
$(document).keypress(function(e) {
if (e.keyCode == 32) {
e.preventDefault(); // e.stopPropagation();
}
})
我相信你有两个选择。
禁用处理程序:
$(document).on('keypress', function keypressHandler(e) {
//disable handler
$(document).off('keypress');
//do stuff
//enable keypress handler
$(document).on('keypress', keypressHandler);
});
使用标志:
var keyHandlerActive = true;
$(document).on('keypress', function(e) {
if (!keyHandlerActive) { return; }
keyHandlerActive = false;
//do stuff
keyHandlerActive = true;
});
嗯,你可以像这样玩,因为我为这两种情况添加了两个按钮,默认情况下 SPACE 将被禁用。请查看:
HTML
<input id="myinput" type="text">
<input id="space_flag" type="hidden" value="0">
<br/>
<input id="enable_space" type="button" value="Enable Space">
<br/>
<input id="disable_space" type="button" value="Disable Space">
JQuery
$(function(){
$("#myinput").keypress(function(event){
if(event.keyCode == 32 && $("#space_flag").val()==0){
return false;
}
});
$("#enable_space").click(function(event){
$("#space_flag").val(1);
});
$("#disable_space").click(function(event){
$("#space_flag").val(0);
});
});
你的关闭条件是space,但是没有提到重新开启的条件..所以我在下面使用了一个计时器..你可以随意改变它
要试用演示,
- 键入除 space 以外的任意键以查看它是否被记录
- 按 space 关闭 10 秒(或更改代码使其直到进程完成)
- 功能在 10 秒后开启
当按下 space 时,该功能将关闭(逻辑关闭,因为 bind/rebind 如果过度使用可能会变得很痛苦)10 秒。
var logicalOff = false;
$(document).keypress(function(e) {
if (logicalOff) { return true; } //well we just ignore and return until turned On
$('div').text(e.which);
if(e.which == 32) {
logicalOff = true; // stop keypress function
setTimeout(function () { // restart keypress function
logicalOff = false;
$('div').text("turned on now");
}, 10000);
$('div').text("turned off for 10 seconds");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>