JavaScript在ASP中實現掩碼文字框

來源:互聯網
上載者:User
在網頁中輸日期、時間、IP地址等需要一定的格式限制,否則將會程式將會很難和程式溝通。
  最近在做一個程式正好需要用到此方面,在網上找到過相應的程式,但用起來都非常惡,於是乎只好自己實現一個了。

  首先實現兩個函數用來操作游標:


   // 得到一個文字框控制項的當前游標位置
  function getPos(obj)
  {
  obj.focus();
  var workRange=document.selection.createRange();
  obj.select();
  var allRange=document.selection.createRange();
  workRange.setEndPoint("StartToStart",allRange);
  var len=workRange.text.length;
  workRange.collapse(false);
  workRange.select();
  return len;
  }
 

   // 設定一個文字框控制項的當前游標位置
  function setCursor(obj,num){
  range=obj.createTextRange();
  range.collapse(true);
  range.moveStart('character',num);
  range.select();
  }

  主要函數實現的主要思想是當鍵盤按下時進行一些操作,我設計在onKeyDown事件中。

  在onKeyDown中,首先將系統預設的鍵盤處理屏蔽掉

   // 封住傳統處理
  window.event.returnValue = false;

  然後處理相應需要處理的鍵盤訊息。
  這裡隨便處理幾個必要的就可以了,因為文字框本身也不需要什麼太多的使用者操作,所以把游標的前移、後移、刪除操作進行處理,這樣你的文字框就有了基本的操作,現在操作起來已經很順手了。

   // 自行處理按鈕
  switch (nKeyCode)
  {
  case 8:// 如果動作是退格[<-]
  {
  strText =  strText.substr(0,nCursorPos-1) + strText.substr(nCursorPos, nTextLen-nCursorPos);
  nCursorPos--;
  break;
  }
  case 46:// 如果動作是del[del]
  {
  strText =  strText.substr(0,nCursorPos) + strText.substr(nCursorPos+1,nTextLen-nCursorPos-1);
  nCursorPos--;
  break;
  }
  case 38:// 如果動作是方向鍵[上]
  case 39:// 如果動作是方向鍵[右]
  {
  nCursorPos++;
  break;
  }

   case 37:// 如果動作是方向鍵[左]
  case 40:// 如果動作是方向鍵[下]
  {
  nCursorPos--;
  break;
  }
  default :
  {
  strText =  strText.substr(0,nCursorPos) + String.fromCharCode(nKeyCode) + strText.substr(nCursorPos,nTextLen);
  nCursorPos++;
  if (nCursorPos>strText.length)
  {
  nCursorPos=strText.length;
  }
  break;
  }

  }
 
  其它的任何訊息都當添加一個字元,可見不可見的字元,都將添加並游標往後走一下。見上方的default 處理部份。

  然後判斷掩碼是否正確,如果正確,那麼此次輸入合法,將值顯示添加到文字框中。

   if (strText.match(expMask))
  {
  // 輸入格式正確
  objTextBox.value = strText;
  }
  最後將游標移到適當的位置。  
  

   // 移動游標
  setCursor(objTextBox,nCursorPos);
  完成!

  其主要就是把系統的鍵盤訊息替換成自己的處理,屏蔽掉系統的,這樣就可以獲得最大的操控。
  如此就完成了一個對指定的Regex進行格式限制的TEXTBOX就誕生了。

  附完整代碼:


   // 根據指定正運算式,來控制OBJ表示
  function mask(objTextBox,mask)
  {
  // 掩碼
  expMask = new RegExp(mask);
  // 當前文字框中的文本
  var strText =objTextBox.value;
  // 文本長度
  var nTextLen=strText.length;

  // 當前游標位置
  var nCursorPos=getPos(objTextBox);

  // 按下的鍵碼
  var nKeyCode = window.event.keyCode;
  if (nKeyCode > 95) nKeyCode -= (95-47);

  // 封住傳統處理
  window.event.returnValue = false;
 


// 自行處理按鈕
  switch (nKeyCode)
  {
  case 8:// 如果動作是退格[<-]
  {
  strText =  strText.substr(0,nCursorPos-1) + strText.substr(nCursorPos, nTextLen-nCursorPos);
  nCursorPos--;
  break;
  }
  case 46:// 如果動作是del[del]
  {
  strText =  strText.substr(0,nCursorPos) + strText.substr(nCursorPos+1,nTextLen-nCursorPos-1);
  nCursorPos--;
  break;
  }
  case 38:// 如果動作是方向鍵[上]
  case 39:// 如果動作是方向鍵[右]
  {
  nCursorPos++;
  break;
  }
  case 37:// 如果動作是方向鍵[左]
  case 40:// 如果動作是方向鍵[下]
  {
  nCursorPos--;
  break;
  }
  default :
  {
  strText =  strText.substr(0,nCursorPos) + String.fromCharCode(nKeyCode) + strText.substr(nCursorPos,nTextLen);
  nCursorPos++;
  if (nCursorPos>strText.length)
  {
  nCursorPos=strText.length;
  }
  break;
  }

  }

  if (strText.match(expMask))
  {
  // 輸入格式正確
  objTextBox.value = strText;
  }

  // 移動游標
  setCursor(objTextBox,nCursorPos);
  }

  // 得到一個文字框控制項的當前游標位置
  function getPos(obj)
  {
   obj.focus();
  var workRange=document.selection.createRange();
  obj.select();
  var allRange=document.selection.createRange();
  workRange.setEndPoint("StartToStart",allRange);
  var len=workRange.text.length;
  workRange.collapse(false);
  workRange.select();
  return len;
  }

  // 設定一個文字框控制項的當前游標位置
  function setCursor(obj,num){
  range=obj.createTextRange();
  range.collapse(true);
  range.moveStart('character',num);

  range.select();
  }
 


  使用方法:

  1.設定預設的、不定的格式初值。如:日期時間的格式初值為“// ::”,表示(年/月/日 時:分:秒)。IP的為“...”(192.168.0.1)。其實就是設定一個不會違反Regex的字元就可以。

  2.在表單的TEXT框的onKeyDown事件中調用mask函數,參數objTextBox是指定的文字框的name。參數mask是Regex格式的掩碼。

  例子:

  要使用日期時間型的掩碼框


   <input name="i_etmend" type="text" id="i_etmend" value="{I_ETMEND}" maxlength="19"  >

  要使用IP掩碼框


   <input name="i_bip" type="text" id="i_bip" value="{I_BIP}" maxlength="15" >




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.