domingo, 6 de mayo de 2012

jQuery maxlength en un textbox multilinea (textarea)

Si alguna vez hemos usado en asp.net los textbox multilinea nos habremos dado cuenta que la propiedad maxlength no funciona.
<asp:TextBox ID="TextBoxMultiLine" MaxLength="1" TextMode="MultiLine" runat="server"></asp:TextBox>
Que en html quedaría
<textarea name="ctl00$MainContent$TextBoxMultiLine" rows="2" cols="20" id="MainContent_TextBoxMultiLine"></textarea>
Para hacer que funcione podemos usar el siguiente código en jQuery
$(document).ready(function () {
  $('[id$=_TextBoxMultiLine]').keypress(function (e) {
    if ($(this).val().length + 1 > 1)
      e.preventDefault();
  });
});
El motivo de usar en el selector de jQuery el identificador _TextBoxMultiLine, es por la forma que tiene ASP.NET de asegurarse que un identificador sea único en la página. Si usamos ASP.NET 4.0 podemos hacer uso del modificador ClientIDMode y asignarlo con Static para evitar que el ID cambie. En se caso el script quedaría de la siguiente
<asp:TextBox ID="TextBoxMultiLine" MaxLength="1" TextMode="MultiLine" ClientIDMode="Static" runat="server"></asp:TextBox>
$(document).ready(function () {
  $('#TextBoxMultiLine').keypress(function (e) {
    if ($(this).val().length + 1 > 1)
      e.preventDefault();
  });
});
Otra posibilidad es no poner usar el atributo ClientIDMode y usar el ClientID de la siguiente manera
$(document).ready(function () {
  $('#<%= TextBoxMultiLine.ClientID %>').keypress(function (e) {
    if ($(this).val().length + 1 > 1)
      e.preventDefault();
  });
});
Si no queremos usar jQuery, podríamos llamar al un método en el evento keyUp. Para eso añadimos esto en el Page_Load de nuestra página
TextBoxMultiLine.Attributes.Add("onKeyUp", "Count(this, 1)");
function Count(text, long) {
  var maxlength = new Number(long);
  if (text.value.length > maxlength) 
    text.value = text.value.substring(0, maxlength);  
}

Happy coding!

No hay comentarios:

Publicar un comentario