如何控制asp控件textbox输入内容的长度??

件代码如下:
<asp:TextBox id="TextBox1" runat="server" TextMode=MultiLine Height="96px" Width="131px" MaxLength=66></asp:TextBox>
运行后无法控制输入内容长度,可以无限制输入。原因何在???望指教

MaxLength对单行文本框有效 多行就不行了

似乎现在也没有完美的解决方法 涉及的文本编码的很多方面 例如中,英文,数字 不是输入而是粘贴等等.

较可行的方法: 加入CustomValidator验证控件然后自己写脚本



转听棠blog 对这个问题的探讨:

第一.

<script language="javascript">
<!--
             String.prototype.len=function(){
                   return this.replace(/[^\x00-\xff]/g,"**").length;
             }
             function CheckLength(source, arguments)
             {
                   var ValidStrLength=50;                  
                   if (arguments.Value.len()<=ValidStrLength)
                         arguments.IsValid = true;
                   else
                         arguments.IsValid = false;
             }

//-->
             </script>

在界面上使用上面的脚本,然后在需要验证的地方,加上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个属性.
onkeypress="javascript:setMaxLength(this,100);" onpaste="limitPaste(this, 100)"

第三.

第二的方案很不错,但也一个问题,就是没有区分中英文字符,中文字符应该算作是两个字符,为此我进行了扩展:
<script language=javascript>
<!--

String.prototype.len=function(){
return this.replace(/[^\x00-\xff]/g,"**").length;
}

//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.len() >= 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.len();
}
}
var tempValue = window.clipboardData.getData("Text");
tempLength = object.value.len() + tempValue.len() - tempLength;
if (tempLength > length)
{
tempLength -= length;
alert(tempLength);
alert(tempValue);
var tt="";
for(var i=0;i<tempValue.len()-tempLength;i++)
{
if(tt.len()<(tempValue.len()-tempLength))
tt=tempValue.substr(0,i+1);
else
break;
}
tempValue=tt;
window.clipboardData.setData("Text", tempValue);
}

window.event.returnValue = true;
}

//-->
</script>

然后设多行的textbox的2个属性.
onkeypress="javascript:setMaxLength(this,100);" onpaste="limitPaste(this, 100)"
现在好了,可以自动区分中英文了,这个方案不错

posted @ 2010-09-13 14:13  王海龙(Heaven)  阅读(1110)  评论(0编辑  收藏  举报