2010-04-26 14 views
23

Tengo un formulario en el que estoy usando la validación remota para verificar si ya existe una dirección de correo electrónico en la base de datos. Sin embargo, la trampa es que en esta forma, el usuario puede seleccionar entre varios "grupos" diferentes, y cada grupo tiene su propio conjunto distinto de direcciones de correo electrónico (por lo tanto, el mismo correo electrónico puede existir una vez en cada grupo).¿Cómo se usa jQuery para validar remotamente un campo que depende de otro campo en el formulario?

La selección de grupo es un menú desplegable en el formulario y la dirección de correo electrónico es un campo de entrada con validación remota. Tengo un par de problemas. En primer lugar, he levantado mi regla remota como esto:

remote: { 
    url: 'remote_script.php', 
    data: { group_id: $('select.group_id').val() } 
} 

Sin embargo, esto parece configurar estáticamente el parámetro group_id a lo que el primer valor de la selección es. Es decir, si cambio la selección, entonces desencadenaré nuevamente la validación remota, el parámetro group_id no cambia

Primero, ¿cómo puedo hacer que este parámetro sea dinámico, dependiendo del valor de una selección en el formulario?

En segundo lugar, ¿cómo activo manualmente la validación remota en el campo de la dirección de correo electrónico? Cuando se cambia group_id select, quiero volver a activar la validación remota en el campo de la dirección de correo electrónico (sin cambiar el valor del campo). Intenté usar

$(selector).validate().element('.email_addr') 

Pero esto parece activar solamente la validación estándar (requerida, correo electrónico), y no la llamada remota.

+0

@Adrian apreciamos la edición, pero creo que la segunda parte del título es en realidad la parte más difícil de entender. Creo que para fines de búsqueda tener alguna referencia en el título sería más útil. En retrospectiva debería haber hecho dos preguntas, pero eso fue hace cinco años ... –

Respuesta

36

encontrado la solución a la segunda parte de mi pregunta:

$(".email_addr").removeData("previousValue"); 

eliminará la memoria caché de la petición remota, y permitir que la solicitud remota que se active de nuevo, usando .element().

Por tanto, mi código es el siguiente: se encontró

$("select.group_id").change(function() { 
    $(".email_addr").removeData("previousValue"); //clear cache when changing group 
    $("#customer_form").data('validator').element('.email_addr'); //retrigger remote call 
    //my validator is stored in .data() on the form 
}); 

solución aquí: solution

La primera parte de mi pregunta fue respondida originalmente por @Jeffery Para

Todo lo que es necesario que haya hecho es cambiar el valor del parámetro a una función, en lugar de solo un valor. El ejemplo de Jeffery se copia a continuación para futuros usuarios de Google:

remote: { 
    url: 'remote_script.php', 
    data: { 
    group_id: function() { 
     return $('select.group_id').val(); 
    } 
    } 
} 
+0

Esto me ayudó :) –

+0

esto no parece funcionar para mí: http: // stackoverflow. com/questions/11479383/jquery-validation-remote-method-only-triggering-once-wont-trigger-after-vali – Jason

+0

Además, ¿de dónde viene el selector ''validator'? vea mi pregunta en el comentario anterior. – Jason

8

Desde el second example de distancia se ve como funciones (evaluados durante la validación) se puede utilizar para los datos, por lo

remote: { 
    url: 'remote_script.php', 
    data: { 
     group_id: function() { 
      return $('select.group_id').val(); 
     } 
    } 
} 

debería funcionar.

Para su segunda pregunta, ¿intentó pasar las reglas de validación al validate()?

+0

Sí, tienes razón, eso funciona para los datos dinámicos. Devuelvo el validador original de la llamada .validate() y luego hago algo parecido a v.element ('.email_addr '), pero parece que no puedo hacer que funcione. ¿Sabes si .element() alguna vez activará una llamada remota? –

+0

No importa, lo descubrí, tuve un error en mi selector. .element() SÍ vuelve a disparar la llamada remota, solo necesita el objeto validador original, que, en retrospectiva, tiene mucho sentido. –

+0

Hmm, en posteriores pruebas, parece que la segunda parte de la pregunta aún no se ha resuelto; parece que no puede activar la llamada remota en un campo sin cambios. Marcará esta pregunta completa y la preguntará por separado. Gracias –

Cuestiones relacionadas