javascript - 暂时删除对执行功能的访问

标签 javascript jquery

我正在做一个项目,我在网站上显示内容,用户可以使用按键 W 或 P 进行“交互”。这样做,该网站执行一个功能发布到 php 写入 mysql 数据库。但是,如果按键被按下并保持或连续多次按下 - 我会运行多个 setTimeouts 并且会发生错误。 如何在执行一次按键功能时暂时取消运行(或禁用)按键功能的权限?

<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>  

最佳答案

引入一个名为 e.g. 的变量已阻止:

var blocked = false;

在 key 处理程序中,如果阻塞则中止,否则将阻塞设置为 true:

$(document).jkey('w',function() {
    if(blocked) return; // abort
    blocked = true; // disallow any further key presses

reloading的success handler中解锁:

success: function() {
    blocked = false; // allow again

关于javascript - 暂时删除对执行功能的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960182/

相关文章:

javascript - node.js 中如何使用客户端库?

javascript - 如何使用preloadjs优先加载资源?

php - 从复选框检索数组值并动态构建查询以选择内容

javascript - jQuery 发送空数据

JQuery 在单击父 div 时切换复选框

javascript - 如何使用 jQuery 检查当前值是否存在于特定元素中

javascript - Canvas 绘制错误

javascript - 逗号分隔列表中最后一个值的正则表达式

javascript - 如何在网站中进行深层链接

javascript - 原型(prototype)/脚本的悬停意图