Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jquery validator addmethod custom message

I've created a method for jquery's validator plugin, that works like the remote rule. The difference is that I'd like to display a dynamic error message (based on the ajax response).

jQuery.validator.addMethod("duplicate", function(value, element, params) { 
    var object_settings = this.settings;
    params.data[$(element).attr("name")] = value;
    $.post(params.url, params.data, function(response) {
        if (response == 'true'){ return true; }
        else {
            object_settings.messages[element.name] = response;
            return false;
        }
    }, 'text');
}, '');

It works...sort of....it sets the message, but doesn't display it initially (if you validate the field a second time, the message is displayed).

Any suggestions?

(maybe the remote rule offers this functionality...I couldn't find anything in the documentation)

like image 314
timborden Avatar asked Jun 10 '09 15:06

timborden


2 Answers

Here's the solution....needed to call the showErrors function of the object:

jQuery.validator.addMethod("duplicate", function(value, element, params) { 
    var validator = this;
    params.data[element.name] = value;
    $.post(params.url, params.data, function(response) {
        if (response == 'true'){ return true; }
        else {
            var errors = {};
            errors[element.name] =  response;
            validator.showErrors(errors);
            return false;
        }
    }, 'text');
}, '');

Taken from "remote" in jquery.validate.js (lines 917 - 919)

like image 134
timborden Avatar answered Nov 12 '22 14:11

timborden


Was looking for solution to this as well, and found this...

In the original example, if you change this line:

object_settings.messages[element.name] = response;

To this:

$.validator.messages.duplicate = response;

This works for me. I found it here: http://blogs.teamb.com/craigstuntz/2009/01/15/37923/

like image 9
jsherk Avatar answered Nov 12 '22 15:11

jsherk