当前位置:首页>>开发编程>>ASP>>新闻内容
JavaScript在ASP中实现掩码文本框
作者:ybbqy 发布时间:2004-11-25 9:16:25 文章来源:CSDN

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

 


[首页]    [上一页]    [下一页]    [末页]    

最新更新
·数据库被挂马的ASP处理方法
·ASP快速获取远程文件大小的方
·用ASP屏蔽迅雷和旋风下载工具
·解决ASP中传送中文参数乱码的
·ASP+AJAX做类似Google的搜索
·ASP的一个非常棒的Debug类(
·ASP中常用的服务器检测源代码
·优化ASP中执行SQL效率的五个
·ASP种msxml3.dll 800c0005错
·挂QQ的ASP版本网页源代码
相关信息
·数据库被挂马的ASP处理方法
·ASP快速获取远程文件大小的方法
·用ASP屏蔽迅雷和旋风下载工具的P2P下载
·解决ASP中传送中文参数乱码的问题
·ASP+AJAX做类似Google的搜索提示
·ASP的一个非常棒的Debug类(VBScript)
·ASP中常用的服务器检测源代码
·优化ASP中执行SQL效率的五个方法
·ASP种msxml3.dll 800c0005错误的另一解决方法
·挂QQ的ASP版本网页源代码
 画心
 愚爱
 偏爱
 火苗
 白狐
 画沙
 犯错
 歌曲
 趁我
 稻香
 小酒窝
 狮子座
 小情歌
 全是爱
 棉花糖
 我知道
 钻石糖
 Nobody
 我爱他
 套马杆
 星空物语
 最后一次
 少女时代
 穿越人海
 断桥残雪
 美了美了
 明天过后
 我很快乐
 到了明天
 心痛2009
 爱丫爱丫
 寂寞好了
 敢不敢爱
 郎的诱惑
 爱情买卖
 super girl
 我叫小沈阳
 i miss you
 姑娘我爱你
 我们都一样
 其实很寂寞
 习惯了寂寞
 我要的飞翔
 我的好兄弟
 爱的华尔兹
 李雷和韩梅梅
 贝多芬的悲伤
 爱我就跟我走
 丢了幸福的猪
 我只是个传说
 要嫁就嫁灰太狼
 即使知道要见面
 如果我变成回忆
 看得最远的地方
 斯琴高丽的伤心
 别在我离开之前离开
 不是因为寂寞才想你
 爱上你等于爱上了错
 在心里从此永远有个你
 一个人的寂寞两个人的错