2012-09-06 17 views
18

Estoy usando el complemento validador encontrado here para validar un formulario.jquery validator plugin with display: none form elements

problema que estoy teniendo es si pongo el siguiente en torno a un elemento de un formulario de entrada no es validada:

<div style="display:none;"><input type="text" name="test" /></div> 

Necesito esto porque estoy usando otras capas de control de interfaz de usuario para los elementos de entrada y Don' Quiero que sean visibles.

Funciona en elementos en línea y de bloque, pero necesito que esté oculto. ¿Hay alguna forma de evitar esto?

Gracias por cualquier comentario

Actualización:

Lo que más me validar campos de selección de opciones, con Django (es decir: {{}} form.select_option_element)

con tanta eficacia:

<div style="display:none;"> 
    {{form.select_option_element}} 
</div> 

... no funciona

Inmediatamente después de la publicación que parece que solucionarlo con:

<div style="visibility: hidden; height: 0;"> 
    {{form.select_option_element}} 
</div> 

A continuación, me permite validar el campo.

+0

Por favor, no coloque la respuesta aceptada dentro de su pregunta. Las preguntas y respuestas deben mantenerse separadas. – dSquared

+0

no hay problema, no se utiliza para el lugar todavía –

+1

posible duplicado de [jQuery Validate - Habilitar validación para campos ocultos] (http://stackoverflow.com/questions/8466643/jquery-validate-enable-validation-for-hidden-fields) –

Respuesta

41

Desde el 1.9.0 Cambio de registro de jQuery Validate:

  • fija # 189 -: elementos ocultos están ahora ignorados por defecto

Para volver a activarlo, simplemente hacer lo siguiente:

$(document).ready(function(){  
    $.validator.setDefaults({ 
     ignore: [] 
    }); 
}); 

Asegúrese de que esto aparece antes de llama al complemento de validación real en su código.

Espero que esto ayude!

+0

ah, gracias. Eso funciona bastante bien. Voy a usar esto en su lugar. –

+0

@lcplusplus No hay problema; me alegro de poder ayudar. – dSquared

+0

¿Por qué una matriz vacía, no una cadena vacía? – Lafi

1

¿Ha intentado agregar el atributo de estilo al elemento de entrada? Así que en lugar de envolver con un div, probar:

<input type="text" name="test" value="" style="display: none;" /> 
+0

No importa, se borró por un minuto. Así es como lo resolví:

+0

Estoy usando django ModelForms, olvidé mencionar que en su mayoría validaba la lista de opciones de selección. –

0

Hay dos cosas que puede hacer.

1) Puede configurar estáticamente valor, que no falla la validación, para este campo de entrada como

<div style="display:none;"><input type="text" name="test" value="default" /></div> 

2) Si desea neglate este valor en su método de validación.

Le agradecería si pudiera proporcionar un código más detallado.

+0

Lo que quiero decir es que el validador ni siquiera reconoce el campo, no el proceso de validación en sí mismo. –

+0

Bueno, vi la forma en que lo arregló. De todos modos, es bueno verte, tienes la solución. – PRP

+0

revise mi actualización, disculpe por no ser más específico –

3

Me gusta la respuesta de @dSquared pero desafortunadamente la propiedad 'ignorar' se restablecerá para el validador de todos los formularios en la página. En algunos casos, no es necesario.

utilizo esta manera:

$(document).ready(function() { 

    var $form = $("#some-form"); 

    $form.validate().settings.ignore = []; // ! Say to validator dont ignore hidden-elements on concrete form. 

    $('#button-send').click(function() { 
     if ($form.valid()) { .. } 
    }); 

    // !! apply plugin's initializers which will hide origin elements (it can be CLEditor or Choosen plugins) 
}); 
0

Otra forma de resolver este problema es cambiar el display: none a visibility: hidden.

Ej: <input type="text" name="test" value="" style="visibility: hidden;" />

Cuestiones relacionadas