2011-10-26 14 views
12

heyho,jQuery Validar formulario plugin: campo 1 no es igual al campo 2

i atrapado en el siguiente problema: Trato de evitar que un usuario puede elegir para los campos "nombre de usuario" y los mismos valores "e-mail" . Estoy usando el plugin jquery form validate (http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

sería genial si alguien pudiera mostrarme el camino, por favor mira mi código aquí:

// validate form  
$("#signupform").validate({ 

    rules: { 
     username: { 
      required: true, 
      minlength: 2, 
      remote: "/_misc/formcheck/username.cfm" 
     }, 
     password1: { 
      required: true, 
      minlength: 5 
     }, 
     password2: { 
      required: true, 
      minlength: 5, 
      equalTo: "#password1" 
     }, 
     email: { 
      required: true, 
      email: true, 
      remote: "/_misc/formcheck/email.cfm" 
     }, 
     email2: { 
      required: true, 
      email: true, 
      equalTo: "#email" 
     }, 
     usage: "required"      
    }, 
    messages: { 
     username: { 
      required: "please username!!", 
      minlength: "username at least 2 chars" 
     }, 
     password1: { 
      required: "please password!", 
      minlength: "password at least 5 chars" 
     }, 
     password2: { 
      required: "please password", 
      minlength: "password at least 5 chars", 
      equalTo: "password fields have to match" 
     }, 
     email: "validate email please!",    
     email2: { 
      required: "please provide correct email address!",    
      equalTo: "email fields must match!" 
     }, 
     usage: "please check my terms!" 
    }, 

gracias de antemano, Michbeck

Respuesta

20

Usted puede añadir un método personalizado de comprobar el nombre de usuario y valores de correo electrónico y añadir la validación de dicho campo.

Demo - http://jsfiddle.net/2hA8M/8/

Ejemplo -

Método -

$.validator.addMethod("user_email_not_same", function(value, element) { 
    return $('#name').val() != $('#email').val() 
}, "* User and Email should not match"); 

Validación -

rules : { 
    username : { 
     user_email_not_same: true 
    } 
}, 
+0

muchas gracias, eso funcionaría en general, sí, pero mi problema es que el campo de correo electrónico todavía está vacío cuando un usuario rellena el nombre de usuario (primer campo en mi formulario), así que traté de darle la vuelta: \t \t reglas: { \t \t \t username: { \t \t \t \t requerido: true, \t \t \t \t minLength: 2, \t \t \t \t remoto: "/ _misc/FormCheck/usernam e.cfm " \t \t \t}, \t \t \t correo electrónico: { \t \t \t \t required: true, \t \t \t \t correo electrónico: true, \t \t \t \t remoto:"/_misc/FormCheck/correo electrónico.pcm", \t \t \t \t user_email_not_same:? cierto \t \t \t}, no funciona de esta manera, uno más pista para mí – michbeck

+0

adjunta una demo Todavía debe funcionar si su vacío Como si se requiere vacío haría.. fallar e incluso si la validación se activa con los valores ingresados, el valor no debe coincidir con el vacío. – Jayendra

+0

muchas gracias, resuelto :-) – michbeck

8

Esto podría ser más flexible:

$.validator.addMethod("notEqualTo", function (value, element, param) 
{ 
    var target = $(param); 
    if (value) return value != target.val(); 
    else return this.optional(element); 
}, "Does not match"); 

La llamada:

rules: { 
    username: { 
     required: true, 
     minlength: 2, 
     remote: "/_misc/formcheck/username.cfm", 
     notEqualTo: "#emailId-or-anyValidJquerySelector" 
    } 
} 

muestra: http://jsfiddle.net/4AdWR/1/

o directamente en HTML:

<input type="text" name="username" notEqualTo="#emailId-or-anyValidJquerySelector" minlength="2" class="required" /> 

muestra: http://jsfiddle.net/B2hWn/1/

Y esto también respeta que Obligatoria/Opcional validaciones anterior ;)

+0

Esto es genial, ¿hay alguna manera de establecer el mensaje de validación para notEqualTo en atributos html? –

Cuestiones relacionadas