通過鍵盤的onkeydown 事件,獲得事件對(duì)象(event)的keyCode 可以做一些限制輸入的功能,做項(xiàng)目是有幾個(gè)輸入框需要輸入的數(shù)字為整
數(shù)且數(shù)字必須小于某一個(gè)值,這種方法比較好,也省去了校驗(yàn)。這里我做了一個(gè)簡(jiǎn)單限制數(shù)字輸入的功能。
其中有個(gè)兩個(gè)事件操作的函數(shù)分別為preventDefault()/*停止默認(rèn)事件*/, 和stopPropagation()/*停止事件冒泡*/,這兩個(gè)函數(shù)比較經(jīng)典,
是參考jquery的源代碼及網(wǎng)上的幾篇文章(這幾篇文章地址已經(jīng)記不住了...)改的。在寫這兩個(gè)函數(shù)的時(shí)候有一個(gè)問題困擾了我很久:如何往這兩
個(gè)函數(shù)里面?zhèn)鬟f事件對(duì)象呢?
首先我先說s一下s事件對(duì)象的傳遞,我們?cè)陧?yè)面上建一個(gè)input id 為inp 代碼很簡(jiǎn)單<input id="inp" value="" type="text" />
我們有兩種方法可以傳遞事件(以onkeydown 事件為例): PS: 功能太小,就不動(dòng)用jQuery了,順便也學(xué)習(xí)一下事件
1.<input id="inps" value="" type="text" onkeydown = "preventDefault(event);stopPropagation(event);" /> 我想這種方式大家
都用吧,只是事件操作和DOM元素混雜在一起,當(dāng)事件操作很多的時(shí)候很不方便,
2.就是用DOM 了,也是我困惑的地方,我看到j(luò)query里面都類似這樣傳遞的$("#XDom").click(function(e){e.preventDefault()});怎么會(huì)憑空
多了個(gè) e 出來了,而且e 就變成事件對(duì)象了,好神奇呀,于是我就這樣寫document.getElementById("inp").onkeydown=function(e){
alert(e);} 然后分別在ie 和ff中運(yùn)行,ie 彈出"undefined" 而ff彈出'[object KeyboardEvent]' ,這下明白了,其實(shí)這個(gè)e只是變量換成其他名字
也可以,ff會(huì)捕獲當(dāng)前的事件,而ie 不會(huì),ie 也好辦呀,window.event就是ie的全局事件對(duì)象(不知道這樣說對(duì)不對(duì),差不多就這個(gè)意思了...)只
要處理一下就好了 var e = e || window.event; 這樣就使得e不論在ff還是在ie中都是事件對(duì)象了
下面是事件操作的代碼:

Code
function stopPropagation(event) {
var e = event || window.event;
if (e.stopPropagation)
e.stopPropagation();
e.cancelBubble = true;
};
function preventDefault(event) {
var e = event || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
};
這個(gè)數(shù)字輸入限制的功能也就簡(jiǎn)單啦, 只是keyCode 查起來真麻煩,完整代碼如下:

Code
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf8"/>
<title>數(shù)字輸入限制</title>
<script type="text/javascript">
function stopPropagation(event) {
var e = event || window.event;
if (e.stopPropagation)
e.stopPropagation();
e.cancelBubble = true;
}
function preventDefault(event) {
var e = event || window.event;
if (e.preventDefault)
e.preventDefault();
e.returnValue = false;
}
function judgeevent(num,o,e) {
e = e ? e : window.event;
var code = e.keyCode
if ((code < 96 || code > 105) && (code < 48 || code > 57) && (code != 8) && (code != 39) && (code != 37) && (code != 46)) {
preventDefault(e);
} else {
if(code >= 48 && code <= 57) {
var tempvalue = o.value;
var tempNum=parseInt(code)-48;
var orNum = tempvalue != ""?parseInt(tempvalue):0;
if((orNum * 10 + tempNum) > num) {
preventDefault(e);
}
} else if(code >= 96 && code <= 105){
var tempvalue = o.value;
var tempNum=parseInt(code)-96;
var orNum = tempvalue != ""?parseInt(tempvalue):0;
if((orNum * 10 + tempNum) > num) {
preventDefault(e);
}
}
}
}
</script>
</head>
<body >
輸入100以下的整數(shù):
<input type="text" id="inp" value="" />
<script type="text/javascript">
document.getElementById("inp").onkeydown = function(e){
//alert(e);
judgeevent(99,this,e)
}
</script>
</body>
</html>
代碼發(fā)了兩遍才發(fā)上來,tinyMCE好像有問題呀!