2012-03-21 16 views
10

Podczas korzystania z MultiLine TextBox (który generuje ustawienie TextArea) właściwość MaxLength nie ma wpływu. Jakie jest najlepsze obejście tego problemu? Chciałbym uzyskać podstawową, zamierzoną funkcjonalność przy minimalnym brzydkim javascriptu itp. Po prostu uniemożliwić użytkownikowi wprowadzenie więcej niż maksymalnej liczby znaków.Jak ustawić maksymalną długość dla wieloliniowego TextBox?

+0

możliwy duplikat [Określanie maxLength dla wielowierszowego pola tekstowego] (http: // stackoverflow.com/questions/1334286/formatowanie-maxlength-for-multiline-textbox) –

Odpowiedz

5

Jeśli chcesz poinformować użytkownika, że ​​przekroczył liczbę znaków w trakcie pisania, możesz użyć funkcji javascript dołączonej do zdarzenia keypress. Ta funkcja sprawdzi długość wprowadzanych danych i anuluje renderowanie znaków, jeśli zostanie osiągnięte maksimum.

Inną opcją jest użycie kontrolki RegularExpressionValidator do sprawdzania poprawności danych wejściowych w przesyłaniu.

Moim zdaniem pierwsza opcja jest znacznie lepsza.

Nie dodaję żadnego kodu, ponieważ google jest pełen przykładów dla wszystkich smaków, jest to bardzo częste zadanie.

Here masz przykładowe wyszukiwanie, które może pomóc.

5

Hej pukipuki można to zrobić w następujący sposób:

<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(); 
} 
});}); 

można zobaczyć więcej w tym poniższym linkiem: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html

+5

Podczas gdy to powstrzymuje użytkowników od wpisywania większej ilości tekstu, uniemożliwia im to również użycie klawiszy Delete lub Backspace (lub innych klawiszy) w polu, aby mogli " t faktycznie edytuje tekst po osiągnięciu limitu. –

+0

Twoja odpowiedź jest bardziej kompletna i użyteczne niż zaakceptowana. +1 dla ciebie –

+2

nie działa dla kopiowania i wklejania – fubo

1

Jeśli używasz wiążą model obiektowy do tego pola tekstowego można wykorzystać atrybuty DataAnnotations ustawić maksymalną długość tej właściwości. Opieram się na MVC o tym, ale to powinno działać również dla ASP.NET!

W ten sposób nie zadzierzesz z żadnym Javascriptem ani ustawieniem czegokolwiek w znacznikach.

+1

Niestety WebForms nie ma natywnej obsługi Adnotacji danych, takich jak MVC. Ale są pewne obejścia, sprawdzam je, dzięki! doskonały przykład pożądanej odpowiedzi) +1 –

20

Jeśli nie dbają o starszych przeglądarek (patrz supported browsers here)
można ustawić MaxLength normalnie jak ten

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

i zmusić go do wydrukowania się HTML

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

Wypróbuj to ..

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

Oto krzyż rozwiązanie przeglądarka:

<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; 
    } 
} 

Trzeba myśleć o kopiowanie i wklejanie. Jest to trochę trudne, po prostu wyłączam je przy pomocy Jquery'ego. Możesz jednak utworzyć własną funkcję, aby przeprowadzić bardziej złożoną weryfikację. Ale w moim przypadku kopiowanie i wklejanie jest niedozwolone.

jQuery wyłączyć kopiowania i wklejania:

jQuery(function ($) { 

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

}); 
Powiązane problemy