繁体   English   中英

使用jQuery要求用户按下键盘上的每个字母和数字

[英]Using jQuery to require user to press every letter and number on keyboard

我需要使用jQuery创建一个游戏,要求用户按下键盘上的每个字母和数字。

我开始创建一个包含26个字母和10个数字的数组,并在屏幕上显示它们。 这应该使用jQuery一次追加到DOM,而不是为每个字母单独追加。 当用户按下一个键时,我需要检查它是否被按下。 如果已按下,则将字母或数字涂成灰色。 如果之前按下了键,请让用户知道。 一旦按下所有角色,我需要让用户知道他们赢了游戏,应该使用jQuery显示消息。

这是我到目前为止在DOM上显示字母的所有代码,我真的不知道从哪里开始:

var array = [];
var func = function(num1,num2){

    for(var i = num1; i <= num2; i++){
        array.push(String.fromCharCode(i));
    }

  for(var i = 0; i < array.length; i++){
  array[i].className= array[i];
  }
    return(array);
}

func(65,90)
func(48,57)
String.fromCharCode(65,66,67,68)

var para = document.createElement("p");
para.innerHTML=array
document.body.appendChild(para);

这是实现您想要的一种方式:

假设一个html文件:

<div id="board"></div>
<div id="log"></div>

相应的javascript代码:

var array = [];
var func = function(num1,num2){
    for(var i = num1; i <= num2; i++){
        array.push(i);
    }
}

func(65,90)
func(48,57)
array = [].concat(array, [65,66,67,68])
console.clear()
console.log(array)

var buttons = []
array.forEach(function(item) {
  // create a button with the charcode, and an id
  var btn = $('<button>').html(String.fromCharCode(item)).prop('id', item)
  buttons.push(btn)
})
// appending all elements at once to the board as per your specification
$('#board').append(buttons)

var pressed = []
// listenning on window 'keypress' event
$(document).on('keypress', function(ev) {
  console.log(ev)
  if(ev.hasOwnProperty('charCode') || ev.hasOwnProperty('keyCode')) {
    // get the charcode pressed
    var code = ev.charCode || ev.keyCode;
    // quit  if code has already been pressed
    if(pressed.indexOf(code) > -1) return;
    pressed.push(code); // adding the code to the pressed array
    // changing button color
    $('#' + code).css({'color': 'red', 'background-color': 'grey'});
    $('#' + code).prop('disabled', 'disabled');
    $("#log").html(array.length - pressed.length + ' remaining')
  }
})

有一个很好的小提琴!

编辑 :更短的版本

请参阅更新的小提琴

Css文件:

.disabled {
  color: red;
  background-color: gray
}

HTML文件:

<div id="board"></div>

js文件:

var array = []
var func = function(num1,num2){
    for(var i = num1; i <= num2; i++){
        // create a button with the charcode, and an id
        var btn = $('<button>').html(String.fromCharCode(i)).prop('id', i)
  array.push(btn)
    }
}
func(65,90)
func(48,57)

// appending button to the board
$('#board').append(array)

var pressed = []
// listenning on window 'keypress' event
$(document).on('keypress', function(ev) {
    // get the charcode pressed
    var code = ev.charCode || ev.keyCode || 0;
    if(pressed.indexOf(code) > -1) return
    // quit  if code has already been pressed
    pressed.push(code); // adding the code to the pressed array
    // changing button color via css class
    $('#' + code).addClass('disabled')
})

另一个答案接近原始代码,并且满足一次添加所有字母的原始要求。

需要一个css标签:

.gray {color:gray;}

这是javascript:

var array = [];
var func = function(num1,num2){

    for(var i = num1; i <= num2; i++){
         var ch = String.fromCharCode(i);
        array.push('<span id="char-'+ch.toLowerCase()+'">'+ch+'</span>');
    }

  for(var i = 0; i < array.length; i++){
  array[i].className= array[i];
  }
    return(array);
}

func(65,90)
func(48,57)
String.fromCharCode(65,66,67,68)

var para = document.createElement("p");
para.innerHTML=array
document.body.appendChild(para);

$(document).keypress(function(e){
    if(/[a-z0-9]/i.test(e.key)) {
        $('#char-'+e.key.toLowerCase()).addClass('gray');
    }
});

还有一个小提琴

只需快速记下几件事:你需要在每个字母周围标记一个标签,否则你不能将它变灰。 除此之外,只需要附加按键监听器,然后查找并消除字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM