財務相關係統中涉及到金額的文字框有如下要求: • 進入金額文本文字框不使用中文IME • 不能輸入非數字 • 焦點在文字框中時文字框靠左對齊;焦點離開文字框時文字框靠右對齊,顯示千分位 1.禁用IME:,禁止鍵入非法值,只有這些才能被鍵入(k == 9) || (k == 13) ||(k==46)||(k==8)||(k==189)||(k==109)||(k==190)||(k==110)|| (k>=48 &&k<=57)||(k>=96 && k<=105)||(k>=37 && k<=40)。 onkeydown="return numonKeyDown()" 不要寫成onkeydown="numonKeyDown()" 區分事件響應函數 和事件響應函數調用的函數。 2.禁止粘貼(偉大的Tester),<input onpaste="return false;" ,太暴力,應該只是禁 止粘貼非法值。在onpaste中通過clipboardData.getData('Text')取到粘貼板中的值,然後遍曆每個字元,看是否是合法的值,如果全部是合法值才允許粘貼,只要有一個非法值就禁止粘貼。charAt、charCodeAt 添加千分位的方法,見備忘 3.焦點在的時候靠左對齊沒有千分位,焦點不在時靠右對齊千分位。 this.style.textAlign='right' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script type="text/javascript"> function initEvent() { var txtAmount = document.getElementById("txtAmount"); txtAmount.onkeydown = onkeydownEvent; //鍵盤輸入時效果,限制非法字元輸入 txtAmount.onblur = onblurEvent;//焦點離開時的效果(數字向靠右對齊) txtAmount.onpaste = function () { var text = clipboardData.getData("text"); if (valid(text)) { clipboardData.setData("text", text); } else { return false; } }; //禁止粘貼1.4 } function valid(txt) { var i = 0; var len = txt.length; for (i = 0; i < len; i++) { var checkTxt = txt.charCodeAt(i); //使用charCodeAt方法,方法可返回指定位置的字元的 Unicode 編碼。這個傳回值是 0 - 65535 之間的整數。 if (checkTxt == 37 || checkTxt == 8 || checkTxt == 39 || checkTxt == 46 || checkTxt == 190 || checkTxt == 110 || (checkTxt >= 48 && checkTxt <= 57) || (checkTxt >= 96 && checkTxt <= 105)) { continue; } else { return false; } } return true; } function onkeydownEvent() { if (event.keyCode == 37 ||event.keyCode==8|| event.keyCode == 39 || event.keyCode == 46 || event.keyCode == 190 || event.keyCode == 110 || (event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)) { } else { return false; } } function onblurEvent() { // var txtAmount = document.getElementById("txtAmount"); this.style.textAlign = "right"; // txtAmount.value = txtAmount.value + ''; this.value = commafy(this.value); } function commafy(n) { n = n + ""; var re = /(-?\d+)(\d{3})/; while (re.test(n)) { n = n.replace(re, "$1,$2"); } return n; // var n1 = n.replace(/^(\d+)((\.\d+)?)$/, function (s, s1, s2) { return s1.replace(re, "$1,$2") + s2; }); //return n1; } </script> </head> <body onload="initEvent()"> <input type="text" id="txtAmount" onclick="this.style.textAlign='left';this.value=this.value.replace(/,/g,'');" /> </body> </html> |