2012-03-21 19 views
10

Quando si utilizza una casella di testo MultiLine (che genera un'Area di testo), la proprietà MaxLength non ha alcun effetto. Qual è la soluzione migliore? Mi piacerebbe avere funzionalità di base, con un minimo di brutto javascript, ecc. Basta impedire all'utente di inserire più di un numero massimo di caratteri.Come impostare la lunghezza massima per multilinea TextBox?

+0

possibile duplicato di [Specificare maxlength per testo multilinea] (http: // StackOverflow.it/questions/1334286/specificando-maxlength-for-multiline-textbox) –

risposta

5

Se si desidera far sapere all'utente se ha superato la quantità di caratteri durante la scrittura, è possibile utilizzare una funzione javascript associata all'evento keypress. Questa funzione testerebbe la lunghezza dell'input e annullerebbe il rendering dei caratteri se fosse stata raggiunta la lunghezza massima.

Un'altra opzione è utilizzare il controllo RegularExpressionValidator per convalidare l'input su submit.

A mio parere, la prima opzione è molto meglio.

Non sto aggiungendo alcun codice poiché google è pieno di esempi per tutti i gusti, questo è un compito molto comune.

Here si dispone di una ricerca di esempio che potrebbe aiutare.

5

Hey pukipuki si può fare come segue:

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

Si può vedere di più in questa seguente link: http://jquerybyexample.blogspot.in/2010/10/set-max-length-for-aspnet-multiline.html

+5

Mentre questo impedisce agli utenti di inserire più testo, impedisce loro di usare i tasti cancella o backspace (o qualsiasi altro tasto) nella casella, quindi possono ' In realtà, modifica il testo una volta raggiunto il limite. –

+0

La tua risposta è più completa e utile di quella accettata. +1 per te –

+2

non funziona per copia e incolla – fubo

1

Se si utilizza un bind modello a oggetti per quel testo è possibile utilizzare gli attributi DataAnnotations per impostare la lunghezza massima di quella proprietà. Sono basato su MVC, ma dovrebbe funzionare anche per ASP.NET!

In questo modo non si scherza con Javascript o non si imposta nulla nel markup.

+1

Purtroppo WebForms non ha il supporto nativo di Annotazioni di dati come MVC. Ma ci sono alcuni accorgimenti, li controllo, grazie! perfetto esempio di risposta desiderata) +1 –

20

Se non si cura di browser meno recenti (vedi supported browsers here),
è possibile impostare MaxLength normalmente come questo

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

e costringerlo a essere stampato al codice HTML

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

Prova questo ..

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

Ecco una soluzione cross browser:

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

Bisogna pensare al copia e incolla. Questo è un po 'complicato, lo disabilito semplicemente con Jquery. Ma puoi creare la tua funzione per effettuare una verifica più complessa. Ma nel mio caso, copia e incolla non è permesso.

Jquery per disabilitare copia e incolla:

jQuery(function ($) { 

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

}); 
Problemi correlati