簡體   English   中英

JavaScript、HTML:如何禁用 Shift 鍵(特別是與其他鍵組合以創建特殊字符時)?

[英]JavaScript, HTML: How can I disable the Shift Key (specially when combined with other keys to create special characters)?

https://ysuran92.github.io/calculator-project/index

我有一個計算器項目,或類似的東西。 它由 HTML、CSS 和 JavaScript 制造。 現在,在我的 JS 文件中,有一些代碼可以防止諸如字母之類的字符出現在計算器的顯示屏上。 我唯一不明白的是如何“禁用”Shift+(0-9)。 這是一些代碼:

  // let regEx = /^\s*([-+]?)(\d+)(?:\s*([-+*\/])\s*((?:\s[-+])?\d+)\s*)+$/;

document.addEventListener("keydown", (event) => {
 if (event.keyCode == 13 || event.code == "NumpadEnter") {
     calc.value = eval(calc.value);
 } else if (event.keyCode == 46) {
     calc.value = "";
 } else if (event.keyCode == 8) {
     back();
 } else if (event.keyCode >= 48 && event.keyCode <= 57) {
     calc.value += event.key;
 } else if (event.keyCode >= 96 && event.keyCode <= 105) {
     calc.value += event.key;
 } else if (
     event.keyCode == 107 ||
     event.keyCode == 109 ||
     event.keyCode == 106 ||
     event.keyCode == 111 ||
     event.keyCode == 190 ||
     event.keyCode == 110
  ) {
      calc.value += event.key;
  }
 });

您可能會注意到,我已經嘗試過 RegEx(它不起作用,可能是因為我對此一無所知)並且我也嘗試過 event.preventDefault()。 任何提示或意見將不勝感激。 提前致謝。

向您推薦使用正則表達式的想法是實際測試event.key而不是event.keyCode 您不必測試按下的鍵盤鍵,而只需測試要添加到字符串中的值。 這更好,因為這不依賴於用戶的鍵盤。

這是一種天真的方法:

if (['0', '1', '2', '3', '5', '6', '7', '8', '9'].includes(e.key)) {
  console.log('I am a number');
}

正則表達式更復雜,但允許您以更簡潔的方式編寫:

if (e.key.match(/[0-9]/)) {
  console.log('I am a number');
}

您擁有的正則表達式不僅允許數字。 它可用於驗證給定表達式是否正確,例如1 * 2 / -3 這個regex101可以幫助你更多地理解它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM