利用JS为页面元素添加事件

        今天需要为项目所有的页面可编辑input框增加空字符串过滤功能,利用正则表达式很容易实现内容的过滤,但是项目有上百个页面,每个页面也有20左右的input框,如果一个一个的加事件的话,估计后半生都没了,如何在不改动现有页面的前提下,又能实现目标呢?想到了在页面解析的时候用JS去动态的为这些输入框增加事件,并且还要保留原事件,只要想到了,一定能做到,doit。下面是实现的代码。

       

function trimInputs(){ 
   var o=document.getElementsByTagName("input");
   for(var i=0;i <o.length;i++){
    if(o[i].type=="text"&& !o[i].disabled && !o[i].readOnly){//只对可编辑的输入框添加过滤功能 
      o[i].attachEvent("onblur",function(obj){ return function() 
                   {obj.value=(obj.value).replace(/\s/g,"");} }(o[i]));//闭包传参     } 
      } 

} 
window.attachEvent("onload",trimInputs);//如果页面少的话,从性能考虑可以写在调用页面里,不要写在公共JS里面

 

 

 

 因为所有的页面几乎都需要增加这样的功能因此就把这段功能直接加到项目的公共JS,进入页面测试下完全达到预期效果,哎,不过那个闭包传参研究了好大会,看来以后还要加紧对闭包的学习。

 

        上面的只是为项目需求而写的特定代码,稍微修改下可以适合多种情况。为实现这个功能又特意的温习下正则表达式,修改了以前系统里面对数字的验证方法,数字正则表达式:


     

function test(obj){
          
      if(obj.value.match(/^-?\d*(\.)?\d+$/)){
                  alert("匹配");
         }else{ alert("不匹配"); } 
}

 

 

BWT:闭包在IE下容易引起内存的泄露,如果页面比较复杂的话,可以用下面的代码来代替闭包

function demo(){ 
      //IE下是srcElement ,FF下是target 
     var obj=event.srcElement ? event.srcElement : event.target; 
     //do something for obj 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值