原帖地址:http://bbs.csdn.net/topics/280025790
七楼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>试试</title>
<script type="text/javascript">
function check(event, len) {
var e = window.event || event;
if(e.ctrlKey || e.altKey || e.shiftKey || isFunKey(e.keyCode)) {
return true;
}
var obj = e.srcElement || e.target;
if(getLength(obj.value) >= len) {
return false;
}
return true;
}
function change(obj, len) {
var txt = obj.value;
if(getLength(txt) <= len) {
return;
}
while(getLength(txt) > len) {
txt = txt.substring(0, txt.length - 1);
}
obj.value = txt;
}
function getLength(str) {
var len = 0;
for(var i = 0; i < str.length; i++) {
if(str.charCodeAt(i) < 0x80) {
len++;
}else{
len += 2;
}
}
return len;
}
function isFunKey(code) {
// 8 --> Backspace
// 35 --> End
// 36 --> Home
// 37 --> Left Arrow
// 39 --> Right Arrow
// 46 --> Delete
// 112~123 --> F1~F12
var funKeys = [8, 35, 36, 37, 39, 46];
for(var i = 112; i <= 123; i++) {
funKeys.push(i);
}
for(var i = 0; i < funKeys.length; i++) {
if(funKeys[i] == code) {
return true;
}
}
return false;
}
</script>
</head>
<body>
<form name="frm" method="post" action="#">
<input type="text" name="txt" id="txt" οnkeydοwn="return check(event, 10)" onpropertychange="change(this, 10)" οninput="change(this, 10)"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
如果想限制只能输入十个汉字,那么change方法的参数应该传20,所以我在change代码中添加len=len*2;这样感觉更方便点。