【发布时间】:2016-05-29 22:55:40
【问题描述】:
我有一个我用游戏创建的按键功能,以使用 enter 按钮以表单形式获取用户输入(并让我定义的一系列功能首先在 上按顺序执行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.");
}
});
这也不起作用。
我还尝试创建另一个函数,仅处理将输入限制为与与游戏相关的 enter 键的函数分开的字母,该函数也不起作用/导致 enter 不触发这些事件(或者我的游戏不显示猜测字母或将正确的猜测注册为错误的猜测)以及只是做出一个条件语句if(keycode > 65 || keycode < 90) 这也导致了游戏或显示错误,我不确定我应该怎么做 - 我已经尝试了很多不同的方法一整天都无济于事,我们将不胜感激。
如果您需要了解整个游戏的运作方式,请查看我的 Fiddle 的链接:
https://jsfiddle.net/KindeR99/wuftst3t/
编辑**:我已经尝试过 .alpha() jQuery 插件(虽然我想找到一个本地 JS/jQuery 解决方案),但它也对我不起作用(但我可能没有正确使用它)。我不确定为什么这些解决方案都不起作用/要么不限制输入或弄乱我的游戏功能。我也用正则表达式尝试了这种方法:
$(".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 显示(我不确定哪种方法是解决此问题的最佳方法,哪种方法对我的游戏功能影响最小)。仅在按下回车后才进行输入并不那么重要 - 我只是希望能够保持游戏功能不变,我不确定要走哪条路来解决这个问题 - 如果我知道哪种方法是最好的要正确执行此操作,我可以只关注该方法并尝试进行更深入的调试。
【问题讨论】:
-
为什么不验证
space的长度为1并进行简单的正则表达式匹配?if (space.length !== 1 || !space.match(/[a-z]/)) { alert('Bad input'); return; } -
& 这实际上是一个好主意@Mike C - 可能会添加一个限制(以防止它发生)而不是警报......谢谢!
-
我一直在尝试以您的方式修复此功能,例如 24 小时 @Mike C,但我无法正确使用语法,因为它会弄乱我的游戏显示或进入错误的猜测是正确的,反之亦然-我不确定自己做错了什么-我是这样尝试的:
-
$(".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(/[az]/)) { play(space); $(this).val(''); endGame(); return false; } else window.alert("这是受限的。") ; } });
-
以及现在警报所在的位置@Mike C - 我不确定我做错了什么......
标签: jquery function input keypress jquery-events