表单处理[4]

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>9:42</title>
<script>
//跨浏览器添加事件
function addEvent(obj,type,fn){
    if(obj.addEventListener){
        obj.addEventListener(type,fn,false);
    }else if(obj.attachEvent){
        obj.attachEvent('on'+type,fn);
    }
}
//跨浏览器移除事件
function removeEvent(obj,type,fn){
    if(obj.removeEventListener){
        obj.removeEventListener(type,fn,false);
    }else if(obj.detachEvent){
        obj.detachEvent('on'+type,fn);
    }
}
//跨浏览器阻止默认行为
function preDef(evt){
    var e=evt||window.event;
    if(e.preventDefault){
        e.preventDefault();
    }else{
        e.returnValue=false;
    }
}
//跨浏览器获取目标对象
function getTarget(evt){
    if(evt.target){  //W3C
        return evt.target;
    }else if(window.event.srcElement){ //IE
        return window.event.srcElement;
    }
}

//跨浏览器获取字符编码
function getCharCode(evt){
    var e=evt||window.event;
    if(typeof e.charCode=='number'){
        return e.charCode;
    }else {
        return e.keyCode;
    }
}

// 过滤输入模式:纯数字
// 1.禁止或屏蔽非数字键的输入,阻止非数字键的默认行为
// 2.验证后取消,你可以先输入非法字符,然后判断后,取消你刚输入的文本


addEvent(window,'load',function(){
    var fm=document.getElementById('myForm');
    var user=fm.elements['user'];
    var content=fm.elements['content'];
    addEvent(content,'keypress',function(evt){
        var e=evt||window.event;
        var charCode=getCharCode(evt);
        //alert(charCode);
        //alert(String.fromCharCode(charCode));
        //正则表达式来获取文本是否为数字
        if(!/\d/.test(String.fromCharCode(charCode)) && charCode>0){
            preDef(evt); //屏蔽掉非数字键盘的输入  加上charCode>0是因为火狐光标键,退格键,删除键都是0
            // ps:前半段条件判断只有数字才可以输入,导致常规按键,比如光标键、退格键、删除键等无法使用。部分浏览器比如Firfox,需要解放这些键,而非字符触发的编码均为0;在Safari3之前的浏览器,也会被阻止,而它对应的字符编码全部为8,所以最后加上charCode>8即可
            //这种方法比较脆弱
        }
    });
    // addEvent(content,'copy',function(evt){
    //     preDef(evt);
    // })
    // addEvent(content,'cut',function(evt){
    //     preDef(evt);
    // })
    // addEvent(content,'paste',function(evt){
    //     preDef(evt);
    // })

    //屏蔽中文输入法,但Chrome无效
    //content.style.imeMode='disabled';
    // PS: 屏蔽输入法用户体验不是很好,会让用户以为电脑坏了

    //用这种方法:
    //验证舒服非法后取消输入
    addEvent(content,'keyup',function(evt){
        this.value=this.value.replace(/[^\d]/g,'');  //将非数字键转换为空
    })
    
})
</script>
</head>
<body>
<form id="myForm" name="yourForm">
姓名:<input type="text" name="user" value="123"/>
<textarea name="content">textarea</textarea>
</form>
</body>
</html>
posted @ 2017-09-15 17:28  耿鑫  阅读(120)  评论(0编辑  收藏  举报