如何控制asp.net控制項TextBox輸入內容的長度--(多種方法)

來源:互聯網
上載者:User

2009-10-22 17:36

件代碼如下:
<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)"
現在好了,可以自動區分中英文了,這個方案不錯 來源:http://hi.baidu.com/lisoaring/blog/item/a3deab189398e80734fa41c9.html

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.