2011年11月13日 星期日

※針對 ie 和 Firefox,簡化 JavaScript 的 onKeyPress 判斷

※針對 ie Firefox,簡化 JavaScript onKeyPress 判斷
簡化的關鍵,僅在於判斷前加一行:
if (window.event) { e = event; e.which = e.keyCode; } else if (!e.which) e.which = e.keyCode;
這一行讓 ie 的判斷方式和 Firefox 一樣。

<script language='JavaScript'>

function onKeyPress_(e) {
   // 這一行讓 ie 的判斷方式和 Firefox 一樣。
   if (window.event) { e = event; e.which = e.keyCode; } else if (!e.which) e.which = e.keyCode;

   var code = e.which; // 輸入鍵的 ASCII 碼。
   var char = String.fromCharCode(e.which); // 輸入鍵字元。
   var isAlt = e.altKey; // 是否按下 Alt 鍵。
   var isCtrl = e.ctrlKey; // 是否按下 Ctrl 鍵。
   var isShift = e.shiftKey; // 是否按下 Shift 鍵。
   // ...

   if (code==13) { // 判斷輸入鍵是否為 Enter 鍵。
      //...
   }

   if (48<=code && code<=57) { // 判斷輸入鍵是否為數字 0~9
      //...
   }

   if (65<=code && code<=90) { // 判斷輸入鍵是否為大寫字母 A~Z
      //...
   }

   if (97<=code && code<=122) { // 判斷輸入鍵是否為小寫字母 a~z
      //...
   }

   switch (code) {
      case 38: //up arrow  
      case 40: //down arrow
      case 37: //left arrow
      case 39: //right arrow
      case 33: //page up  
      case 34: //page down  
      case 36: //home  
      case 35: //end                  
      case 13: //enter  
      case 9:  //tab  
      case 27: //esc  
      case 16: //shift  
      case 17: //ctrl  
      case 18: //alt  
      case 20: //caps lock
      case 8:  //backspace  
      case 46: //delete
   }

   return true;  // 按鍵合法,如果是 input 觸發的事件,字元會加入 input value 中。
   return false; // 按鍵不合法,如果是 input 觸發的事件,字元不會加入 input value 中。
}
</script>

input 控制判斷語法:
<input type=text value='' onKeyPress='return onKeyPress_(event)' />

全域控制判斷語法:
<script language='JavaScript'>
document.onkeypress = onKeyPress_; // 設定整個網頁的按鍵輸入由 onKeyPress_ 函數控制判斷。
</script>

注意,以上程式碼僅測試過 ie Firefox

參考網址
http://talk.away.com.tw/main/modules/weblog/details.php?blog_id=7

1 則留言:

  1. 請問是否可以單純做一個判斷式,只要第一個字元不可為空白鍵?謝謝!

    回覆刪除