我正在开展一个项目,我在网站上显示内容用户可以使用按键W或P进行“交互”。这样做,该网站执行一个功能发布到写入mysql数据库的PHP。但是,如果连续多次按下并按住HOLD键 - 我会运行多个setTimeout并发生废话。 如何在执行一次后临时删除对按键功能运行(或禁用)的访问权限?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script language="javascript" type="text/javascript" src="jquery-1.6.4.min.js"></script>
<script language="javascript" type="text/javascript" src="jquery.jkey-1.2.js"></script>
<link rel="stylesheet" href="custom.css">
<script>
$(function content(){
var reloading = function(data){
$.ajax({
url: 'api.php',
data: "",
dataType: 'json',
success: function(data)
{
var id = data[0];
_id = id;
var vname = data[1];
var message = data[2];
var field1 = data[3];
_field1 = field1;
var field2 = data[4];
_field2 = field2;
var ans1 = data[5];
_ans1 = ans1;
var ans2 = data[6];
_ans2 = ans2;
var val1 = parseInt(ans1, 10) ;
_val1 = val1;
var val2 = parseInt(ans2, 10) ;
_val2 = val2;
$('#output').hide().html( message ).fadeIn("slow");
$('#username').hide().html( "@"+vname +":" ).fadeIn("slow");
$('#valg1').hide().html( field1 ).fadeIn("slow");
$('#valg2').hide().html( field2 ).fadeIn("slow");
window["reload_timer"] = setTimeout(reloading,6000);
}
});
}
reloading();
$(document).jkey('p',function() {
$.post("update.php", { "id": _id} )
$('#output').hide().html( "<i>Thx!</i>< ).fadeIn("slow");
$('#username').fadeOut("fast");
$('#valg1').fadeOut("fast");
$('#valg2').fadeOut("fast");
clearTimeout(window["reload_timer"]);
setTimeout(reloading,5000);
});
$(document).jkey('w',function() {
$.post("update.php", { "id2": _id} )
$('#output').hide().html( "<i>Thx!</i>< ).fadeIn("slow");
$('#username').fadeOut("fast");
$('#valg1').fadeOut("fast");
$('#valg2').fadeOut("fast");
clearTimeout(window["reload_timer"]);
setTimeout(reloading,5000);
});
});
</script>
</head>
<body><div id="container">
<div id="username">
</div>
<div id="output"></div>
<div id="posted"></div>
<div id="field1"></div>
<div id="valg1"></div>
<div id="valg2"></div>
</div>
</body>
</html>
答案 0 :(得分:3)
引入一个名为eg的变量blocked
:
var blocked = false;
在密钥处理程序中,如果阻止则中止并将阻止设置为true,否则:
$(document).jkey('w',function() {
if(blocked) return; // abort
blocked = true; // disallow any further key presses
在reloading
的成功处理程序中取消阻止:
success: function() {
blocked = false; // allow again
答案 1 :(得分:2)
添加一个标志并在两个按键处理程序中检查:
var allowKeyPress = true;
$(document).jkey('p',function() {
if (!allowKeyPress)
return;
allowKeyPress = false;
// your existing code here
}
您的代码中的其他地方然后再次设置allowKeyPress = true;
- 我不确定您要执行的确切位置:可能在您的reloading()
函数中,也许在您的成功回调中$.ajax()
(在这种情况下,如果ajax调用失败,你应该添加一个错误或完整的处理程序来重置标志),或者只是添加一个新的,单独的setTimeout()
。