件代碼如下: <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 |