JavaScript在ASP中实现掩码文本框

在网页中输日期、时间、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);
  完成!

  其主要就是把系统的键盘消息替换成自己的处理,屏蔽掉系统的,这样就可以获得最大的操控。
  如此就完成了一个对指定的正则表达式进行格式限制的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)。其实就是设置一个不会违反正则表达式的字符就可以。

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

  例子:

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

   <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" >

时间: 2024-12-06 06:33:33

JavaScript在ASP中实现掩码文本框的相关文章

JavaScript在ASP页面中实现掩码文本框效果代码_应用技巧

最近在做一个程序正好需要用到此方面,在网上找到过相应的程序,但用起来都非常恶,于是乎只好自己实现一个了. 首先实现两个函数用来操作光标: 复制代码 代码如下: // 得到一个文本框控件的当前光标位置 function getPos(obj) { obj.focus(); var workRange=document.selection.createRange(); obj.select(); var allRange=document.selection.createRange(); workR

JavaScript在ASP页面中实现掩码文本框效果代码

最近在做一个程序正好需要用到此方面,在网上找到过相应的程序,但用起来都非常恶,于是乎只好自己实现一个了. 首先实现两个函数用来操作光标: 复制代码 代码如下: // 得到一个文本框控件的当前光标位置 function getPos(obj) { obj.focus(); var workRange=document.selection.createRange(); obj.select(); var allRange=document.selection.createRange(); workR

手机浏览器-asp.net 注册时文本框中出现默认上一次登录的账号密码

问题描述 asp.net 注册时文本框中出现默认上一次登录的账号密码 20C 求大神指教,真的很急,asp.net 文本框中不设置autocomplete=""off""的话手机浏览器上会显默认的一些信息,比如注册的时候出现上一次登录的账号密码,设置autocomplete=""off""了的话出现不能输入的情况,求大神指教,小弟这里感恩跪谢了. 解决方案 是真的吗?uuuuuuu 解决方案二: 我做了一个手机网页,asp.n

用ASP.NET创建自定义文本框

asp.net|创建|文本框 在一个.NET的应用程序中使用自己创建的控件可以大大增强应用程序的功能,你可以在原有控件的基础上加入想要的属性和行为,甚至创建自定义的控件.在asp.net中,我们更可以往一些控件中增加一些客户端的javascript功能,减少每次在提交页面时将数据返回给服务器的次数 ,从而提高程序的功能和效率.在这篇文章中,我们将看下,如何用asp.net创建一个自定义的文本框控件,当焦点在该文本框控件上及离开控件时,文本框控件的背景颜色会随之改变.这个控件将包含如下的功能: 1

WPS文字中多个文本框相互链接的攻略

  相信大家再编辑文档的时候,经常用到文本框来防止文字或图片的移动,但是也有的时候,要将文字或图片两个文本框相接连起来.下面小编就为大家分享下文本框链接的操作技巧,一起来看看吧. 一.绘制文本框 先在文档中要插入文本框的位置单击鼠标,然后在菜单栏中单击"插入--文本框(横或竖文本框)",也可以直接在绘图工具栏中单击"文本框"按钮(如图01),然后拖动鼠标,即可绘制出所需的文本框. 图1文本框 二.调整文本框位置 我们可以根据需要对文本框位置及大小进行适当调整,首先是

利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域

 这篇文章主要介绍了利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域.需要的朋友可以过来参考下,希望对大家有所帮助 原理就是循环获取网页上的控件,然后设置disabled 属性为true.   代码如下:   代码如下: <script type="text/javascript">     var nodeList = document.getElementsByTagName("input");     for (var i =

性能-在js中 有个文本框ID=a 我已经判断它不能输入为空格 但是..

问题描述 在js中 有个文本框ID=a 我已经判断它不能输入为空格 但是.. 在js中 有个文本框ID=a 我已经判断它不能输入为空格 但是如果输入空格空格+字符的时候它就能存进去了 在数据库里就会显示空格空格+字符 这样影响数据库的性能 我就想那样可以输入空格 但是存在数据库的时候 那个空格就没有了 改怎么实现???js jquery 都可以 解决方案 你服务器端将空格去掉就行了.. 或者提交前js替换掉空格,不过这个不保证100%能去掉,别人禁用js就无效了,或者直接post数据到你的动态页

js获取-怎么在js中获取这些文本框的数组name

问题描述 怎么在js中获取这些文本框的数组name 多个文本框的name属性不同,但是各个文本框的name是一个数组,比如name='examscores[i].score',怎么在js中获取这些文本框的数组name,ps:这些文本框是通过ajax在后台action里面,out.writer("""")到前台的,请问有没有人知道怎么做 解决方案 var ipt=document.getElementsByTagName('input');for(var i=0;i&

eclipse rcp中怎么为文本框绑定复合键事件

问题描述 eclipse rcp中怎么为文本框绑定复合键事件 在进行eclipse rcp程序开发时想为一个Text文本框,shift+a?