我之所以完善这个控件也是考虑到控件在判断长度时原来是以Unicode码标准,我希望以Ansi码标准判断,一个中文当成两个长度来处理,这样和数据库保持一致。
解决方案 »
- jquery的jstree添加节点问题
- 如我想找id为aa的table每行第一个input出来,jquery怎么写
- language="javascript" type="text/javascript"是啥意思?
- 弹出新的网页后 父页面变灰 不可编辑 在线等
- 这个产品显示效果作的太好了。高手请教下怎么学习它?
- 怎么提取iframe里的内容
- 地址栏参数#转义编码 如何实现?
- 怎么在服务器端用javascript判断客户端是否安装了我所想安装的软件
- 如何将日期控件的叠放次序在下拉框之上
- 在showModalDialog中产生的页面表单能否在对话框中提交?
- 判断输入的URL网址合法,里面不能包含中文字符?
- html的table解析的巨难问题,希望各位朋友能给个思路!
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;
}
}
在提交以前,先验证一下长度。