<html><head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>New Page 1</title> </head><body> <textarea maxlength=30 onbeforedeactivate=" return checkMaxLength(this);">fds afds afds afd afds afdsa fdsa fdsa fdfdsa fdsa fds afdsa </textarea> </body></html> <script> /** *checkMaxLength. */ function checkMaxLength(textareaObj,maxLength) { if(maxLength == null) maxLength=textareaObj.getAttribute("maxLength"); if(maxLength == null) maxLength=1024; var currentLength = textareaObj.value.length; if (currentLength > maxLength) { alert("The length of your input ("+currentLength+") is larger than maxLength ("+maxLength+") ."); if(textareaObj.createTextRange){ var textRange=textareaObj.createTextRange(); var enterMatch=textareaObj.value.substr(0,maxLength).match(/\n/ig); var enterNum=0; if(enterMatch) enterNum=enterMatch.length textRange.moveStart('character',maxLength-enterNum); textRange.select(); } else { textareaObj.focus(); textareaObj.setSelectionRange(maxLength, currentLength); } window.latestValidateObj=textareaObj; setTimeout("window.latestValidateObj.focus();",0); return false; } return true; } </script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title> New Document </title> <meta name="Generator" content="EditPlus"> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <script language="JavaScript"> <!-- String.prototype.ansiLength = function() { var nl = this.length; var al = nl; for (var i = 0; i < nl; i++) { if (this.charCodeAt(i) > 127) { al = al + 1; } } return al; } function keyd(obj) { var nKeyCode = event.keyCode; if (event.ctrlKey || nKeyCode==8 || nKeyCode==46 || nKeyCode==37 || nKeyCode==38 || nKeyCode==39 || nKeyCode==40) return true; var rng = document.selection.createRange(); var nLeft = 50 - obj.value.ansiLength() + rng.text.ansiLength(); if (nLeft<=0) return false; return true; } function valuefix(obj) { if ((event.propertyName == "value")&&(obj.value.ansiLength() > 50)) { obj.value = SubAnsiStr(obj.value,50); } }function SubAnsiStr(str,i) { if (i <= 0) return ''; var iCount = 0; var sReturn = ''; for (var j = 0; j < str.length; j++) { if ((str.charCodeAt(j) >= 32) && (str.charCodeAt(j) <= 126)) { if ((i - iCount) == 0) return sReturn; sReturn += str.charAt(j); iCount++; } else if ((str.charCodeAt(j) == 13)||(str.charCodeAt(j+1) == 10)) { if ((i - iCount) <= 1) return sReturn; sReturn += str.charAt(j); sReturn += str.charAt(j+1); iCount = iCount + 2; j++; } else { if ((i - iCount) <= 1) return sReturn; sReturn += str.charAt(j); iCount = iCount + 2; } } return sReturn; } //--> </script> </head> <body> <textarea style="width:150px;height:70px" onpropertychange="return valuefix(this);" onkeydown="return keyd(this);" ></textarea> <input onpropertychange="return valuefix(this);" onkeydown="return keyd(this);" ></input> </body> </html> 差不多了吧
String.prototype.len=function() { return this.replace(/[^\x00-\xff$]/g,"**").length; } function CheckLength(oSrc, args) { var ValidStrLength=4000; if (args.Value.len()<=ValidStrLength) args.IsValid = true; else args.IsValid = false; } 在提交以前,先验证一下长度。
上边的那个发错了 String.prototype.len=function() { return this.replace(/[^\x00-\xff$]/g,"**").length; } function CheckLengthForJs(args) { var ValidStrLength=4000; if (args.value.len()<=ValidStrLength) {
function aa(a){
if(/[^,0-9]/g.test(a.value)){
a.value=a.value.replace(/[^,0-9]/g,"")
}
}
</script>
<input type="text" onpropertychange='aa(this)' oninput='this.value=this.value.replace(/[^,0-9]/g,"")'> 这个是只能输数字和^的例子,参照下
至于事件,为了兼容浏览器,需要多做测试
可以使用正则表达式来处理unicode码转Ansi码过程中的问题,但是这是这个问题的一个细节,谢谢给我参考建议。
“现在希望超出长度时,按下键就不输入,而不是先输入后被截掉这种效果。“你的这种效果,
至于长度判断你可以在那2个事件里用函数包装
那2个事件一个是ie,一个是ff下用的
return str.replace(/[^\x00-\xff]/g,"**").length;
}
可以返回Ansi码标准的字符长度。
关键问题是:中文输入不触发客户端keydown事件。目前我的处理方式是:
//keyup时执行以下cut方法
function cut(textinput)
{
if (event) {if ((event.shiftKey == true)||(event.ctrlKey == true)||(event.keyCode == 16)||(event.keyCode == 37)||(event.keyCode == 38)||(event.keyCode == 39)||(event.keyCode == 40)||(event.keyCode == 17)) return;};
var maxl = textinput.getAttribute('maxL');
if (maxl == 0) return;
pos = getPos(textinput);
textinput.value = subansistr(textinput.value,maxl);
setPos(textinput,pos);
} //取光标位置
function getPos(obj)
{
obj.focus();
var workRange=document.selection.createRange();
obj.select();
var allRange=document.selection.createRange();
workRange.setEndPoint('StartToStart',allRange);
var len=workRange.text.length;
workRange.collapse(false);
workRange.select();
return len;
}
//重新设置光标位置
function setPos(obj,pos)
{
var r = obj.createTextRange();
r.collapse(true);
r.moveStart('character',pos);
r.select();
}
因keyup中处理能明显看出字符输入后被截掉了,用户感觉不好!
不必在以下情况下验证:
1。onkeydown
2。onkeyup(按住某键不放)
3。onpaste(粘贴)
4。ondragend(拖入)
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>New Page 1</title>
</head><body>
<textarea maxlength=30 onbeforedeactivate=" return checkMaxLength(this);">fds afds afds afd afds afdsa fdsa fdsa fdfdsa fdsa fds afdsa </textarea>
</body></html>
<script>
/**
*checkMaxLength.
*/
function checkMaxLength(textareaObj,maxLength)
{
if(maxLength == null) maxLength=textareaObj.getAttribute("maxLength");
if(maxLength == null) maxLength=1024;
var currentLength = textareaObj.value.length;
if (currentLength > maxLength) {
alert("The length of your input ("+currentLength+") is larger than maxLength ("+maxLength+") .");
if(textareaObj.createTextRange){
var textRange=textareaObj.createTextRange();
var enterMatch=textareaObj.value.substr(0,maxLength).match(/\n/ig);
var enterNum=0;
if(enterMatch) enterNum=enterMatch.length
textRange.moveStart('character',maxLength-enterNum);
textRange.select();
}
else {
textareaObj.focus();
textareaObj.setSelectionRange(maxLength, currentLength);
}
window.latestValidateObj=textareaObj;
setTimeout("window.latestValidateObj.focus();",0);
return false;
}
return true;
}
</script>
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script language="JavaScript">
<!--
String.prototype.ansiLength = function()
{
var nl = this.length;
var al = nl;
for (var i = 0; i < nl; i++)
{
if (this.charCodeAt(i) > 127)
{
al = al + 1;
}
}
return al;
} function keyd(obj)
{
var nKeyCode = event.keyCode;
if (event.ctrlKey || nKeyCode==8 || nKeyCode==46 || nKeyCode==37 || nKeyCode==38 || nKeyCode==39 || nKeyCode==40) return true;
var rng = document.selection.createRange();
var nLeft = 50 - obj.value.ansiLength() + rng.text.ansiLength();
if (nLeft<=0) return false;
return true;
} function valuefix(obj)
{
if ((event.propertyName == "value")&&(obj.value.ansiLength() > 50))
{
obj.value = SubAnsiStr(obj.value,50);
}
}function SubAnsiStr(str,i)
{
if (i <= 0) return '';
var iCount = 0;
var sReturn = '';
for (var j = 0; j < str.length; j++)
{
if ((str.charCodeAt(j) >= 32) && (str.charCodeAt(j) <= 126))
{
if ((i - iCount) == 0) return sReturn;
sReturn += str.charAt(j);
iCount++;
}
else if ((str.charCodeAt(j) == 13)||(str.charCodeAt(j+1) == 10))
{
if ((i - iCount) <= 1) return sReturn;
sReturn += str.charAt(j);
sReturn += str.charAt(j+1);
iCount = iCount + 2;
j++;
}
else
{
if ((i - iCount) <= 1) return sReturn;
sReturn += str.charAt(j);
iCount = iCount + 2;
}
}
return sReturn;
}
//-->
</script>
</head> <body>
<textarea style="width:150px;height:70px" onpropertychange="return valuefix(this);" onkeydown="return keyd(this);" ></textarea>
<input onpropertychange="return valuefix(this);" onkeydown="return keyd(this);" ></input>
</body>
</html>
差不多了吧
{
return this.replace(/[^\x00-\xff$]/g,"**").length;
}
function CheckLength(oSrc, args)
{
var ValidStrLength=4000;
if (args.Value.len()<=ValidStrLength)
args.IsValid = true;
else
args.IsValid = false;
} 在提交以前,先验证一下长度。
String.prototype.len=function()
{
return this.replace(/[^\x00-\xff$]/g,"**").length;
}
function CheckLengthForJs(args)
{
var ValidStrLength=4000;
if (args.value.len()<=ValidStrLength)
{
return true;
}
else
{
args.select();
return false;
}
}
在提交以前,先验证一下长度。