2012-05-06 28 views
6

Siempre que uso require_from_group, deshabilita todas las otras validaciones. ¿Alguna idea de por qué?Jquery .validate require_from_group

También hay una manera de agrupar "Telefon" y "Mobitel" y aplicar require_from_group a ella?

$(document).ready(function(){ 
    $("#fncMain").validate(
    { 
    /*groups:{Call:"Telefon Mobitel"},*/ 
    rules:{ 
     Davcna:{required:true,exactlength:5, digits:true}, 
     Idzav:{required:true,exactlength:5, digits:true}, 
     Maticna:{required:true,exactlength:5, digits:true}, 
     Telefon:{require_from_group: [1,".callme"]}, 
     Mobitel:{require_from_group: [1,".callme"]} 
    }, 
    messages:{ 

    }} 
    ); 
    }); 

Todos los demás campos no incluidos aquí utilizan la clase simple "required". Si elimino las reglas require_from_group aplicadas a "Telefon" y "Mobitel" todas las otras validaciones de campo funcionan bien.

Gracias por la ayuda.

EDITAR html: http://cl.ly/29391q0Q3G231T2I380m (demasiado tiempo para publicar aquí)

+1

¿Puede compartir el html para este formulario, al menos en lo que se refiere a estas reglas? es decir, qué cosas tienen la clase 'callme', etc. – Ryley

+0

@Ryley publiqué mi HTML (formulario de parte). Verifica la edición de mi publicación. :) – John

+0

Creo que ha encontrado un error ... – Ryley

Respuesta

5

@Tats_innit registró una costumbre require_from_group aquí: https://stackoverflow.com/posts/13127475

Resulta que esto también corrige un error github conectado que se publicó con la versión 1.10.0 de require_from_group en additional-method-1.10.js para jquery.validation.

tema github: require_from_group disables other rules

smileyanp @ github citado este puesto de su solución en la que se reutiliza @ función de Tats_innit y creó un test que mostró funciona correctamente y no desactiva validación, en otras normas definido antes del require_from_group.

Este post está aquí como un ahorro de tiempo, ya que se quemó 3 horas de google para un pequeño detalle como ..

REVISIÓN:

Sólo actualizar additional-method-1.10.js o ejecutar este código después de additional-method-1.10.js ha cargado (sobrescribir la función).

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    var numberRequired = options[0]; 
    var selector = options[1]; 
    var fields = $(selector, element.form); 
    var filled_fields = fields.filter(function() { 
    // it's more clear to compare with empty string 
    return $(this).val() != ""; 
    }); 
    var empty_fields = fields.not(filled_fields); 
    // we will mark only first empty field as invalid 
    if (filled_fields.length < numberRequired && empty_fields[0] == element) { 
    return false; 
    } 
    return true; 
// {0} below is the 0th item in the options field 
}, jQuery.format("Please fill out at least {0} of these fields.")); 
+0

Al comparar el comportamiento de la versión 1.11.1 de esta función con la versión en esta respuesta, he notado que esta versión no parece hacer la revalidación codiciosa como lo hace la versión de envío. Esta versión revalida en el envío de formularios, pero la de envío borra los mensajes de validación tan pronto como la cantidad mínima de campos tenga valores (onkeyup). Solo un FYI en caso de que alguien requiera la avasalladora avaricia para su caso de uso. – jinglesthula

2

Editar: En realidad, parece que esta revisión se ha incorporado en la versión 1.12.0 y se pueden encontrar los punteros de CDN aquí: http://jqueryvalidation.org/

Y como referencia:

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js 
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.min.js 
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.js 
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.min.js 

Encontré este código a continuación antes de encontrar la solución anterior, por lo que mi consejo es utilizar los enlaces CDN mencionados anteriormente en lugar de pegar el código siguiente en su archivo JS.

Hay un better fix out on GitHub now (avance hasta la parte inferior), que he copiado aquí.Este no es mi trabajo y el sfreytag de usuario de GitHub que lo escribió, no parece ser un colaborador de SO, solo quería ponerlo en SO para que otras personas que lo encuentren no tengan que buscar hilos en GitHub:

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    var validator = this; 
    var selector = options[1]; 
    var validOrNot = $(selector, element.form).filter(function() { 
     return validator.elementValue(this); 
    }).length >= options[0]; 

    if(!$(element).data('being_validated')) { 
     var fields = $(selector, element.form); 
     fields.data('being_validated', true); 
     fields.valid(); 
     $(element.form).valid(); 
     fields.data('being_validated', false); 
    } 
    return validOrNot; 
}, jQuery.format("Please fill at least {0} of these fields.")); 

he hecho pruebas limitadas con esta hasta el momento, pero parece estar funcionando como era de esperar, todas las validaciones se producen (en lugar de soplar a través de cualquier validaciones no "require_from_group" como antes), por lo Estoy feliz con eso hasta ahora. Acabo de agregarlo después de la declaración del validador en la parte superior de mi código JS:

$.validator.setDefaults({ 
    debug: true, 
    success: "valid" 
}); 

jQuery.validator.addMethod("require_from_group", function(value, element, options) { 
    var validator = this; 
    var selector = options[1]; 
    //continuation of code... 
Cuestiones relacionadas