有没有一种方法可以检查输入值是否包含特定的keyCode?

时间:2018-12-28 13:29:00

标签: javascript arrays keycode

我有一个keyCodes数组,我需要检查textarea中的任何字符是否不包含在该数组中。不幸的是,虽然很容易检查按键是否在数组中,但如果将文本粘贴到textarea中,则将无法正常工作。

因此,如果具有keyCode的字符存在于不在数组中的文本区域,则我对文本区域的字符限制将更改。例如,如果š(83)的keyCode不在数组中,它将基于此更改字符限制。

 dec_codes=[10, 12, 13, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,...]

我不知道要提供什么其他代码。

是的,我知道检查数组是否是字符而不是keyCodes会更好,但是该数组是为我提供的,我只是想知道是否可以实现我所需要的而不必转换数组。

3 个答案:

答案 0 :(得分:1)

您好,您可以侦听textarea中的任何输入并将其文本的拆分版本与您的char代码进行比较,charCodeAt和一些方法在这里非常有用,例如

devide and combine

答案 1 :(得分:0)

这是如何检查给定数组中的任何字符是否在字符串中。

const charCodes = [10, 12, 13, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42].reduce((acc, x) => Object.assign({}, acc, {[String.fromCharCode(x)]: true}), {});

const hasChars = (source, charCodes) => {
  let len = source.length;
  
  while (len--) {
    if (source.charAt(len) in charCodes) {
      return true;
    }
  }
    
  return false;
}

console.log(hasChars("hello", charCodes))
console.log(hasChars("\nhello", charCodes))
console.log(hasChars("hel)o", charCodes))

答案 2 :(得分:0)

您需要结合使用粘贴和按键事件。粘贴以处理内容的ctrl + v(粘贴)。

要测试类型*或复制粘贴*****或复制粘贴*h*e*l*l*o* **wo**rl**d**,其中*的keyCode为42,(空格)为keyCode为32。

const ta = document.getElementById("ta");
const dec_codes = [10, 12, 13, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42]

ta.addEventListener("keypress", function(e) {
  e.preventDefault();
  this.value += filterInput(e.key);
});

ta.addEventListener("paste", function(e) {
  e.preventDefault();
  this.value += filterInput(e.clipboardData.getData('text/plain'))
});

const filterInput = data => {
  return data.split("").filter(char => {
    return dec_codes.findIndex(code=> char.charCodeAt() === code) === -1
  }).join("");
}
<textarea id="ta"></textarea>