Bug Tracker

Ticket #2908: JqueryValidate-CustomMetaMessages-unix-again.patch

File JqueryValidate-CustomMetaMessages-unix-again.patch, 4.9 kB (added by DaneOConnor, 8 months ago)
  • demo/custom-messages-metadata-demo.htm

     
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
     2<html xmlns="http://www.w3.org/1999/xhtml"> 
     3<head> 
     4<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
     5<title>jQuery validation plug-in - comment form example</title> 
     6 
     7<link rel="stylesheet" type="text/css" media="screen" href="css/screen.css" /> 
     8 
     9<script src="../lib/jquery.js" type="text/javascript"></script> 
     10<script src="../jquery.validate.js" type="text/javascript"></script> 
     11<script src="../lib/jquery.metadata.js" type="text/javascript"></script> 
     12 
     13<!-- for styling the form --> 
     14<script src="js/cmxforms.js" type="text/javascript"></script> 
     15 
     16<script type="text/javascript"> 
     17$(document).ready(function() { 
     18    $("#commentForm").validate({meta: "validate"}); 
     19    $("#commentForm2").validate(); 
     20    $("#commentForm3").validate({ 
     21                                messages:{ 
     22                                        email:{  
     23                                            required:'Enter this!' 
     24                                        } 
     25                                    }        
     26                                }); 
     27 
     28}); 
     29</script> 
     30 
     31<style type="text/css"> 
     32form { width: 500px; } 
     33form label { width: 250px; } 
     34form label.error,  
     35form input.submit { margin-left: 253px; } 
     36</style> 
     37 
     38</head> 
     39<body> 
     40<!-- Custom messages with custom "meta" setting --> 
     41<form class="cmxform" id="commentForm" method="post" action=""> 
     42    <fieldset> 
     43        <legend>Please enter your email address</legend> 
     44        <p> 
     45 
     46            <label for="cemail">E-Mail *</label> 
     47            <input id="cemail" name="email" class="{validate:{required:true, email:true, messages:{required:'Please enter your email address', email:'Please enter a valid email address'}}}"/> 
     48        </p> 
     49        <p> 
     50            <input class="submit" type="submit" value="Submit"/> 
     51        </p> 
     52    </fieldset> 
     53</form> 
     54<!-- Custom messages with default "meta" setting --> 
     55<form class="cmxform" id="commentForm2" method="post" action=""> 
     56    <fieldset> 
     57        <legend>Please enter your email address</legend> 
     58        <p> 
     59 
     60            <label for="cemail">E-Mail *</label> 
     61            <input id="cemail" name="email" class="{required:true, email:true, messages:{required:'Please enter your email address', email:'Please enter a valid email address'}}"/> 
     62        </p> 
     63        <p> 
     64            <input class="submit" type="submit" value="Submit"/> 
     65        </p> 
     66    </fieldset> 
     67</form> 
     68<!-- Custom message for "required" in metadata is overriden by a validate option --> 
     69<form class="cmxform" id="commentForm3" method="post" action=""> 
     70    <fieldset> 
     71        <legend>Please enter your email address</legend> 
     72        <p> 
     73 
     74            <label for="cemail">E-Mail *</label> 
     75            <input id="cemail" name="email" class="{required:true, email:true, messages:{required:'Please enter your email address', email:'Please enter a valid email address'}}"/> 
     76        </p> 
     77        <p> 
     78            <input class="submit" type="submit" value="Submit"/> 
     79        </p> 
     80    </fieldset> 
     81</form> 
     82 
     83 
     84</body> 
     85</html> 
     86 No newline at end of file 
  • jquery.validate.js

     
    122122            } 
    123123        } 
    124124         
    125         var data = jQuery.validator.normalizeRules( 
    126         jQuery.extend( 
    127             {}, 
     125        var ruleList = jQuery.extend({}, 
    128126            jQuery.validator.metadataRules(element), 
    129127            jQuery.validator.classRules(element), 
    130128            jQuery.validator.attributeRules(element), 
    131129            jQuery.validator.staticRules(element) 
    132         ), element); 
     130            ); 
     131        var data = jQuery.validator.normalizeRules(ruleList, element); 
    133132         
     133         
    134134        // make sure required is at front 
    135135        if (data.required) { 
    136136            var param = data.required; 
     
    496496            return true; 
    497497        }, 
    498498         
     499        // return the custom message for the given element and validation method speicifed in the element's "messages" metadata  
     500        customMetaMessage: function(element, method) { 
     501            if (!jQuery.metadata) return undefined; 
     502             
     503            var metaKey = jQuery.data(element.form, 'validator').settings.meta; 
     504            var meta = metaKey ?  
     505                jQuery(element).metadata()[metaKey] :  
     506                jQuery(element).metadata(); 
     507             
     508            return meta.messages ?  
     509                meta.messages[method] :  
     510                undefined; 
     511        }, 
     512                 
    499513        // return the custom message for the given element name and validation method 
    500514        customMessage: function( name, method ) { 
    501515            var m = this.settings.messages[name]; 
     
    516530        defaultMessage: function( element, method) { 
    517531            return this.findDefined( 
    518532                this.customMessage( element.name, method ), 
     533                this.customMetaMessage( element, method ), 
    519534                // title is never undefined, so handle empty string as undefined 
    520535                element.title || undefined, 
    521536                jQuery.validator.messages[method], 
     
    831846            } 
    832847        } 
    833848         
     849        // To support custom messages in metadata ignore rule methods titled "messages" 
     850        if (rules.messages) { 
     851            delete rules.messages 
     852        } 
     853         
    834854        return rules; 
    835855    }, 
    836856