JavaScript在ASP中实现掩码文本框

2016-02-19 18:24 27 1 收藏

今天图老师小编要向大家分享个JavaScript在ASP中实现掩码文本框教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - Web开发 】

  在网页中输日期、时间、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 (nCursorPosstrText.length)
  {
  nCursorPos=strText.length;
  }
  break;
  }

  }
   
  其它的任何消息都当添加一个字符,可见不可见的字符,都将添加并光标往后走一下。见上方的default 处理部份。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  然后判断掩码是否正确,如果正确,那么此次输入合法,将值显示添加到文本框中。

     if (strText.match(expMask))
  {
  // 输入格式正确
  objTextBox.value = strText;
  }
  最后将光标移到适当的位置。  
  

     // 移动光标
  setCursor(objTextBox,nCursorPos);
  完成!

  其主要就是把系统的键盘消息替换成自己的处理,屏蔽掉系统的,这样就可以获得最大的操控。
  如此就完成了一个对指定的正则表达式进行格式限制的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 (nCursorPosstrText.length)
  {
  nCursorPos=strText.length;
  }
  break;
  }

  }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  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)。其实就是设置一个不会违反正则表达式的字符就可以。

  2.在表单的TEXT框的OnKeyDown事件中调用mask函数,参数objTextBox是指定的文本框的name。参数mask是正则表达式格式的掩码。

  例子:

  要使用日期时间型的掩码框

  
     input name="i_etmend" type="text" id="i_etmend" value="{I_ETMEND}" maxlength="19"  onkeydown="mask(i_etmend, '^(([0-9]{0,4})-([0-9]{0,2})-([0-9]{0,2}) ([0-9]{0,2}):([0-9]{0,2}):([0-9]{0,2}))$')"

  要使用IP掩码框

  
     input name="i_bip" type="text" id="i_bip" value="{I_BIP}" maxlength="15" onkeydown="mask(i_bip, '^([0-9]{0,3}[.][0-9]{0,3}[.][0-9]{0,3}[.][0-9]{0,3})$')"

来源:http://www.tulaoshi.com/n/20160219/1617540.html

延伸阅读
标签: word
word2010利用文本框实现纵横混排   word中自带纵横混排的功能,但是用起来非常的不方便,所以笔者建议大家用文本框来实现纵横混排。而且你还可以给文本框设置背景颜色,更改文字也非常的灵活方便。下图就是笔者建立的一个纵横混排的样例,今天我们就来看看具体的一步步是怎么实现的。 步骤/方法 打开你的额word,然后点...
标签: Web开发
文本框栏目介绍
{* 单元说明:      递归清空窗体上 所有文本框,下拉框中的文本。 作者        :     笔名:易  一    英文名:yeeyee E-Mail      :    jane1437@163.com 创建时间:&...
        对于文本框,只读状态下和普通状态下,浏览器对其并没有做什么特殊的标记,表面看来,效果是一样的,这样,对用户来说,易用性并不是很高.         当然,我们可以改变只读文本框的背景颜色来加以区分,这个时候就需要程序员自己判断这个文本框是不是只读,然后再引入相...
标签: 办公软件
在Word中,经常需要使用文本框来实现一些特殊要求的编辑操作,有的时候需要在每页中都要插入同样的文本框用来添加诸如页面背景图片等用途时,虽然通过复制、粘贴操作也可以实现,但当需要处理的页数太大时,这样就显得有些费时间了。其实,在Word中巧用页眉编辑功能就可以轻松地实现批量插入文本框的目的了: 打开欲插入文本框的文档...

经验教程

576

收藏

7
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部