暂时删除执行功能的访问权限

时间:2011-10-31 21:51:55

标签: javascript jquery

我正在开展一个项目,我在网站上显示内容用户可以使用按键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>  

2 个答案:

答案 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()