我有一个keyCodes数组,我需要检查textarea中的任何字符是否不包含在该数组中。不幸的是,虽然很容易检查按键是否在数组中,但如果将文本粘贴到textarea中,则将无法正常工作。
因此,如果具有keyCode的字符存在于不在数组中的文本区域,则我对文本区域的字符限制将更改。例如,如果š(83)的keyCode不在数组中,它将基于此更改字符限制。
dec_codes=[10, 12, 13, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,...]
我不知道要提供什么其他代码。
是的,我知道检查数组是否是字符而不是keyCodes会更好,但是该数组是为我提供的,我只是想知道是否可以实现我所需要的而不必转换数组。
答案 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>