使用keyjQuery限制键盘输入

我有一个使用游戏创建的按键功能,该功能可以通过带回车键的形式接收用户输入(并具有我首先定义的一系列功能,首先按被按下的Enter键即可).

$(".form-control").keypress(function(event) {
          var keycode = (event.keyCode ? event.keyCode : event.which);
          if (keycode == 13) {
            var space = $(this).val().toLowerCase();

            if (!(wrongGuesses.indexOf(space) > -1 || rightGuesses.indexOf(space) > -1)) {
              play(space);
              $(this).val('');
              endGame();
              return false;
            }
            else
              window.alert("You already guessed this letter.");

            }
  }); 

效果很好.但是,现在,我试图限制用户只能输入字母&一次只能输入一个-我想限制除了输入单个字母之外的任何其他内容,然后再将我的按键事件链与回车键绑定在一起-我尝试执行以下操作:

 $(".form-control").keypress(function(event) {
          var keycode = (event.keyCode ? event.keyCode : event.which);
          if (!(keycode >= 65 && keycode <= 90)){
             event.preventDefault();
          }   
          if (keycode == 13) {
      //    if (keycode > 65 && keycode < 90){
            var space = $(this).val().toLowerCase();

            if (!(wrongGuesses.indexOf(space) > -1 || rightGuesses.indexOf(space) > -1)) {
              play(space);
              $(this).val('');
              endGame();
              return false;
            }
            else
              window.alert("You already guessed this letter.");

            }
         //   }
  });

这不起作用(我觉得语法错误)&它弄乱了我的游戏功能;
然后我尝试:

$(".form-control").keypress(function(event) {
          var keycode = (event.keyCode ? event.keyCode : event.which);

          if (keycode == 13) {
            var space = $(this).val().toLowerCase();

            if (!(wrongGuesses.indexOf(space) > -1 || rightGuesses.indexOf(space) > -1)) {
              play(space);
              $(this).val('');
              endGame();
              return false;
            }
            else if (keycode < 13 || keycode > 13 && keycode < 65 || keycode > 90){
              event.preventDefault();
            }
            else
              window.alert("You already guessed this letter.");

            }
  });

这也没有用.
我也尝试过创建另一个功能,该功能只是将输入限制为与游戏相关的回车键,而输入键的功能与游戏无关,输入也不起作用/导致输入不触发这些事件(或者我的游戏未显示猜测值)字母或将正确的猜测注册为错误的猜测),以及仅做出条件声明if(键码> 65 ||键码< 90),这也会导致游戏或显示错误&我不太确定该怎么做-我一整天都尝试了许多不同的方法,但无济于事.一些建议/建议将不胜感激.
如果您需要查看整个游戏的工作原理,请点击以下链接到我的小提琴:
https://jsfiddle.net/KindeR99/wuftst3t/

编辑**:我已经尝试过.alpha()jQuery插件(尽管我想为此找到一个本机JS / jquery解决方案),但它也不适合我(但我可能没有使用过)对).我不确定为什么这些解决方案都不起作用/不限制输入或搞乱我的游戏功能.我也尝试过这种使用w / reg表达式的方法:

 $(".form-control").keypress(function(event) {
          var keycode = (event.keyCode ? event.keyCode : event.which);
          if (keycode == 13) {
            var space = $(this).val().toLowerCase();

            if (!(wrongGuesses.indexOf(space) > -1 || rightGuesses.indexOf(space) > -1) || space.length !== 1 || !space.match(/[a-z]/)) 
            {
              play(space);
              $(this).val('');
              endGame();
              return false;
            }
            else
              window.alert("That's restricted.");

            }
  });

这只是限制输入的键码:

$(".form-control").keypress(function(event) {
          var keycode = (event.keyCode ? event.keyCode : event.which);
          if (keycode > 65 || keycode < 90) {
            var space = $(this).val().toLowerCase();

            if (!(wrongGuesses.indexOf(space) > -1 || rightGuesses.indexOf(space) > -1)) {
              play(space);
              $(this).val('');
              endGame();
              return false;
            }
            else
              window.alert("You already guessed this letter.");

            } 
          else 
          {
          event.preventDefault();
          }  
  });

但是它们都弄乱了我的游戏或游戏功能的html显示(我不确定哪一种是解决此问题的最佳方法,而这对我的游戏功能的影响最小).输入仅在按回车键之后才进行输入不是很重要,我只希望能够保持游戏功能不变.我不确定要走哪条路去解决这个问题-如果我知道哪种方法是正确执行此操作的最佳方法,我可以只关注该方法.尝试做更深入的调试.谢谢!

最佳答案
有两点可以帮助改善您的游戏:

>要在文本框中添加最大输入长度,请使用maxlength属性.

< input type =“ text” id =“ form” class =“ form-control” placeholder =“ guess” maxlength =“ 1”>
>要仅限制字母输入并防止出现空字符串猜测,请将以下内容添加到您的(“ .form-control”).keypress函数中

.

var keycode = event.keyCode ? event.keyCode : event.which;


if ((keycode < 64 || keycode > 91) && (keycode < 96 || keycode > 123) && keycode !== 13)
    return false;


if (keycode == 13) {
    var space = $(this).val().toLowerCase();

    if (space == '') {
        window.alert("Please enter a letter to guess.")
        return false;
    }

    if (wrongGuesses.indexOf(space) > -1 || rightGuesses.indexOf(space) > -1) {
        play(space);
        $(this).val('');
        endGame();
        return false;
    }
    else
        window.alert("You already guessed this letter.");
}

转载注明原文:使用keyjQuery限制键盘输入 - 代码日志