validate submithandler form example español jquery json validation jquery-plugins jquery-validate

submithandler - Extienda el complemento JQuery Validator con un método personalizado



jquery validate unobtrusive (1)

Agregué un método de validación personalizado para validar una contraseña. Sin embargo, no importa si el JSON que obtengo es:

{"success":true}

o:

{"success":false}

La contraseña de campo nunca valida.

$(document).ready(function() { // Ad custom validation $.validator.addMethod(''authenticate'', function (value) { $.getJSON("./json/authenticate.do",{ password: value},function(json) { return (json.success == true) ? true : false;} ); }, ''Wrong password''); $(''form#changePasswordForm'').validate({ rules: { repeat_new_password: { equalTo: "#new_password" }, password : {authenticate: true} }, submitHandler: function(form) { $(form).ajaxSubmit( { dataType: "json", success: function(json) { alert("foo"); } }); } }); });

Alguna idea, que estoy haciendo mal?


Lo que hace mal es que cuando agrega su método personalizado, nunca devuelve verdadero o falso de él. Lo devuelve en la devolución de llamada ajax.

$.validator.addMethod(''authenticate'', function (value) { $.getJSON("./json/authenticate.do",{ password: value }, function(json) { // This return here is useless return (json.success == true) ? true : false; }); // You need to return true or false here... // You could use a synchronous server call instead of asynchronous }, ''Wrong password'');

En lugar de agregar un método personalizado, puede usar la función remota :

$(''form#changePasswordForm'').validate({ rules: { repeat_new_password: { equalTo: "#new_password" }, password : { // This will invoke ./json/authenticate.do?password=THEVALUE_OF_THE_FIELD // and all you need to do is return "true" or "false" from this server script remote: ''./json/authenticate.do'' } }, messages: { password: { remote: jQuery.format("Wrong password") } }, submitHandler: function(form) { $(form).ajaxSubmit({ dataType: "json", success: function(json) { alert("foo"); } }); } });

Puedes verlo en acción aquí .