件代码如下:
运行后无法控制输入内容长度,可以无限制输入。原因何在???望指教
MaxLength对单行文本框有效 多行就不行了
似乎现在也没有完美的解决方法 涉及的文本编码的很多方面 例如中,英文,数字 不是输入而是粘贴等等.
较可行的方法: 加入CustomValidator验证控件然后自己写脚本
转听棠blog 对这个问题的探讨:
第一.
在界面上使用上面的脚本,然后在需要验证的地方,加上CustomValidator验证控件,把ClientValidationFunction属性指定为"CheckLength",这个方法就是上面的客户端函数,函数中的 var ValidStrLength=50; 就是指要验证的字符数。要说明的是,这里的字符数是会自动区分中文字符的,一个中文字符会自动记为两个字符,因此,不需要象单行文本框一样,设置为总字符数的一半来控制。
好了,通过上面的设置,你就可以看到被控制的效果了!!
第二.
第一有个地方感觉不大好,就是这样用customer validator来控制就和一般textbox设置maxlength所得到的效果不是很一致.一种是限制输入一种是提示错误.
我是用的javascript来控制的.
//Set maxlength for multiline TextBox
function setMaxLength(object,length)
{
var result = true;
var controlid = document.selection.createRange().parentElement().id;
var controlValue = document.selection.createRange().text;
if (controlid == object.id && controlValue != "")
{
result = true;
}
else if (object.value.length >= length)
{
result = false;
}
if (window.event)
{
window.event.returnValue = result;
return result;
}
}
//Check maxlength for multiline TextBox when paste
function limitPaste(object,length)
{
var tempLength = 0;
if(document.selection)
{
if(document.selection.createRange().parentElement().id == object.id)
{
tempLength = document.selection.createRange().text.length;
}
}
var tempValue = window.clipboardData.getData("Text");
tempLength = object.value.length + tempValue.length - tempLength;
if (tempLength > length)
{
tempLength -= length;
tempValue = tempValue.substr(0,tempValue.length - tempLength);
window.clipboardData.setData("Text", tempValue);
}
window.event.returnValue = true;
}
然后设多行的textbox的2个属性.
οnkeypress="javascript:setMaxLength(this,100);" οnpaste="limitPaste(this, 100)"
第三.
第二的方案很不错,但也一个问题,就是没有区分中英文字符,中文字符应该算作是两个字符,为此我进行了扩展:
然后设多行的textbox的2个属性.
οnkeypress="javascript:setMaxLength(this,100);" οnpaste="limitPaste(this, 100)"
现在好了,可以自动区分中英文了,这个方案不错