2010-07-29 11 views
7

Tengo un problema al usar jQuery Validate. El caso es que tengo algunos cuadros de texto con sus atributos maxlength establecidos. Aunque no son necesarios, aún no se pueden validar cuando están vacíos o en blanco.Entradas de texto con maxlength que no valida con jQuery Validate

HTML de ejemplo:

<input type="textbox" id="tbx1" maxlength="100" value="" />

Luego, vuelve $('#tbx1').valid()false. ¿No debería devolver true? ¿Hay alguna solución conocida para esto?

Ah, y agregar $('#myform').validate({ ignore: '#tbx1' }); no funciona para mí, porque estoy usando controles ASP.NET con sus ID automáticos. Sé que podría usar el ID de cliente del control o algo así como la IDOverride de Wilco, pero esto no es lo que prefiero.

Entonces, ¿alguien? ¡Gracias!

+0

es el cuadro de texto de un campo obligatorio? Creo que el plugin de validación recorta el espacio en blanco, por lo que si el cuadro está en blanco o solo en espacios y requerido, no se validará. – JKirchartz

+0

@JKirchartz ese es el punto. el campo no es obligatorio No sé si es un error o diseño, pero me gustaría encontrar una solución para este – rdumont

+0

. Tiene que ser un error. Estoy sufriendo con la misma cosa. Tiene un campo que NO es obligatorio, pero simplemente le da un maxlength y de repente el plugin jquery validate cree que falla la validación. 100% error. El otro signo de contar cuentos es que ni siquiera genera un error para el campo. Así que algo definitivamente se rompió allí. ¡Frustrante porque necesito poner límites de longitud máxima en mis campos! – Aaron

Respuesta

0

En primer lugar, supongo que la entrada tiene un atributo de "nombre" y simplemente no se muestra en su ejemplo? Si no, intente y puede solucionar el problema.

En segundo lugar, ¿ha intentado establecer explícitamente el campo para no ser necesario pero tener una longitud máxima en el objeto validador? Por ejemplo:

var rules = { 
    'txtbx1': { 
    required: false, 
    maxlength: '100' 
    } 
}; 

$('#formId').validate({rules:rules}); 
+0

Gracias por su respuesta, Philip, pero esto no resuelve el problema En realidad, me había olvidado de esta pregunta, ya que ha sido unánimemente declarada como un error. Mi entrada no tenía un atributo de nombre, ya que no era necesario en ese contexto. Además, como dije en la pregunta, estaba buscando una solución que no requiriera '$ ('# formId'). Validate (...);' – rdumont

3

encontré con este problema a mí mismo en algunas formas complejas que estaba escribiendo ...

Mi solución es sólo para crear mi propio método maxlength lo que pueda 'maxLen' que funciona casi exactamente igual el método predeterminado solo bajo un nombre diferente. Simplemente pegue esto encima de su llamada de validación principal ($ ("# mainform"). Validate ({}); o como se llame a su formulario).

//Custom Max Length Validation 
jQuery.validator.addMethod("maxLen", function (value, element, param) { 
    //console.log('element= ' + $(element).attr('name') + ' param= ' + param) 
    if ($(element).val().length > param) { 
     return false; 
    } else { 
     return true; 
    } 
}, "You have reached the maximum number of characters allowed for this field."); 

Una vez que hayas hecho esto se puede añadir la regla de este modo:

rules: { 
     Message: { 
      required: false, 
      maxLen: 200 
     } 
} 
18

Esto parece ser un error en este plugin. Si fija mediante la sustitución del método mediante una implementación personalizada utilizando el siguiente código:

$.validator.addMethod("maxlength", function (value, element, len) { 
    return value == "" || value.length <= len; 
}); 
+1

Esto funcionó mejor para mí que establecer un nuevo nombre para mi Nuevo método. Había establecido el atributo maxlength en el campo de entrada, no había intentado validarlo. En un nivel, no siento la necesidad de validarlo: el navegador se asegura de que no se puede agregar más caracteres que los especificados, así que realmente no veo cómo puede fallar la validación. Pero, no hay daño en validar, siempre y cuando la validación funcione. :) – Adam

+1

¡GRACIAS! ese error me costó unas horas! No puedo entender cómo esto puede ser un problema después de 2 años. – black666

+0

Esto es útil ya que la verificación de "longitud máxima" del navegador no siempre representa las nuevas líneas. Como se describe [aquí] (http://stackoverflow.com/questions/10030921/chrome-counts-characters-wrong-in-textarea-with-maxlength-attribute). – Peter

Cuestiones relacionadas