2012-03-21 45 views
10

使用多行文本框(生成文本區域)設置時,MaxLength屬性不起作用。什麼是最好的解決方法?我想用最少的醜陋JavaScript獲得基本的,預期的功能等。只是防止用戶輸入超過最大數量的字符。如何爲多行TextBox設置maxlength?

+0

[指定最大長度爲多行文本框](HTTP的可能重複。com/questions/1334286/specify-maxlength-for-multiline-textbox) – 2015-06-03 08:22:45

回答

5

如果您想讓用戶知道他在寫入時是否超出了字符數量,則可以使用附加到keypress事件的JavaScript函數。這個函數將測試輸入的長度,並在達到最大值時取消字符渲染。

另一種選擇是使用RegularExpressionValidator控件驗證提交時的輸入。

在我看來,第一個選擇更好。

我沒有添加任何代碼,因爲谷歌充滿了各種口味的例子,這是一個非常普遍的任務。

Here您有一個示例搜索可能會有幫助。

5

嘿pukipuki你可以做如下:

<asp:TextBox ID="txtValue" runat="server"TextMode="MultiLine" Rows="10"Columns="50"></asp:TextBox> 

$(document).ready(function(){ 
var MaxLength = 250; 
$('#txtValue').keypress(function(e) 
{ 
    if ($(this).val().length >= MaxLength) 
{  
    e.preventDefault(); 
} 
});}); 

你可以看到更多在此以下鏈接: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html

+5

雖然這會阻止用戶輸入更多文本,但也會阻止他們使用框中的刪除或退格鍵(或任何其他鍵),因此他們可以'實際上在文本達到極限時編輯文本。 – 2012-07-19 13:47:06

+0

你的答案比接受的答案更完整和有用。 +1 for – 2012-09-11 22:06:41

+2

不適用於複製和粘貼 – fubo 2014-01-31 15:09:29

1

如果您使用的是模型對象綁定到文本框,您可以使用DataAnnotations屬性設置該屬性的最大長度。我基於MVC,但它也適用於ASP.NET!

這樣你就不會亂用任何Javascript或設置任何標記。

+1

不幸的是,WebForms沒有像MVC這樣的數據註釋的本地支持。但有一些解決方法,我檢查出來,謝謝!理想答案的完美例子)+1 – 2012-03-21 18:25:04

20

如果你不關心舊的瀏覽器(見supported browsers here),
可以設置的MaxLength通常這樣

<asp:TextBox ID="txt1" runat="server" TextMode="MultiLine" MaxLength="100" /> 

,並迫使它打印出來的HTML

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    txt1.Attributes.Add("maxlength", txt1.MaxLength.ToString()); 
} 
0

試試這個......

Dim script As String = "" 

    script = script + " <script type='text/javascript'> function CheckLength(obj) {" 
    script = script + " var object = document.getElementById(obj);" 
    script = script + " if (object.value.length > 5) {" 
    script = script + "  object.focus();" 
    script = script + "  object.value = object.value.substring(0, 5); " 
    script = script + "  object.scrollTop = object.scrollHeight; " 
    script = script + "  return false;" 
    script = script + " }" 
    script = script + " return true;" 
    script = script + " }</script>" 


    Dim b As New TextBox() 
    b.ID = "btnSomeButton" 
    b.TextMode = TextBoxMode.MultiLine 
    Mypanel.Controls.Add(b) 
    b.Attributes.Add("onkeyup", "return CheckLength('" & b.ClientID & "');") 

    Page.ClientScript.RegisterStartupScript(Page.GetType(), "key", script, False) 
3

這裏是一個跨瀏覽器的解決方案:

<asp:TextBox TextMode="MultiLine" runat="server" ID="txtPurpose" Columns="50" Rows="2" onkeypress="return isokmaxlength(event,this,255);" ClientIDMode="static"></asp:TextBox> 

的Javascript:

function isokmaxlength(e,val,maxlengt) { 
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode 

    if (!(charCode == 44 || charCode == 46 || charCode == 0 || charCode == 8 || (val.value.length < maxlengt))) { 
     return false; 
    } 
} 

你要想想複製和粘貼。這有點棘手,我只是用Jquery禁用它。但是您可以創建自己的功能來執行更復雜的驗證。但在我的情況下,不允許複製和粘貼。

Jquery的禁用複製和粘貼://計算器:

jQuery(function ($) { 

    $("#txtPurpose").bind({ 
     paste: function (e) { 
      e.preventDefault(); 
     } 
    }); 

}); 
相關問題