2010-04-08 6 views
1

Je tente actuellement de modifier jQuery Valider le plugin GeekTantra pour faire appliquer une classe à l'élément de liste parent contenant le champ de saisie si un message d'erreur est affiché. Voici le code avec mon addition de jQuery (id) .addClass (redhighlight); Je suis assez nouveau à jQuery donc je fais probablement une erreur évidente sanglante.jQuery - Changement jqueryvalidate pour ajouter la classe à parent li

/** 
* @author GeekTantra 
* @date 20 September 2009 
*/ 
(function(jQuery){ 
    var ValidationErrors = new Array(); 
    jQuery.fn.validate = function(options){ 
     options = jQuery.extend({ 
      expression: "return true;", 
      message: "", 
      error_class: "ValidationErrors", 
      error_field_class: "ErrorField", 
      live: true 
     }, options); 
     var SelfID = jQuery(this).attr("id"); 
     var unix_time = new Date(); 
     unix_time = parseInt(unix_time.getTime()/1000); 
     if (!jQuery(this).parents('form:first').attr("id")) { 
      jQuery(this).parents('form:first').attr("id", "Form_" + unix_time); 
     } 
     var FormID = jQuery(this).parents('form:first').attr("id"); 
     if (!((typeof(ValidationErrors[FormID]) == 'object') && (ValidationErrors[FormID] instanceof Array))) { 
      ValidationErrors[FormID] = new Array(); 
     } 
     if (options['live']) { 
      if (jQuery(this).find('input').length > 0) { 
       jQuery(this).find('input').bind('blur', function(){ 
        if (validate_field("#" + SelfID, options)) { 
         if (options.callback_success) 
          options.callback_success(this); 
        } 
        else { 
         if (options.callback_failure) 
          options.callback_failure(this); 
        } 
       }); 
       jQuery(this).find('input').bind('focus keypress click', function(){ 
        jQuery("#" + SelfID).next('.' + options['error_class']).remove(); 
        jQuery("#" + SelfID).removeClass(options['error_field_class']); 



       }); 
      } 
      else { 
       jQuery(this).bind('blur', function(){ 
        validate_field(this); 
       }); 
       jQuery(this).bind('focus keypress', function(){ 
        jQuery(this).next('.' + options['error_class']).fadeOut("fast", function(){ 
         jQuery(this).remove(); 
        }); 
        jQuery(this).removeClass(options['error_field_class']); 

       }); 
      } 
     } 
     jQuery(this).parents("form").submit(function(){ 
      if (validate_field('#' + SelfID)) 
       return true; 
      else 
       return false; 
     }); 
     function validate_field(id){ 
      var self = jQuery(id).attr("id"); 
      var expression = 'function Validate(){' + options['expression'].replace(/VAL/g, 'jQuery(\'#' + self + '\').val()') + '} Validate()'; 
      var validation_state = eval(expression); 
      if (!validation_state) { 
       if (jQuery(id).next('.' + options['error_class']).length == 0) { 
        jQuery(id).after('<span class="' + options['error_class'] + '">' + options['message'] + '</span>'); 
        jQuery(id).addClass(redhighlight); 

       } 
       if (ValidationErrors[FormID].join("|").search(id) == -1) 
        ValidationErrors[FormID].push(id); 
       return false; 
      } 
      else { 
       for (var i = 0; i < ValidationErrors[FormID].length; i++) { 
        if (ValidationErrors[FormID][i] == id) 
         ValidationErrors[FormID].splice(i, 1); 

       } 
       return true; 
      } 
     } 
    }; 
    jQuery.fn.validated = function(callback){ 
     jQuery(this).each(function(){ 
      if (this.tagName == "FORM") { 
       jQuery(this).submit(function(){ 
        if (ValidationErrors[jQuery(this).attr("id")].length == 0) 
         callback(); 
        return false; 
       }); 
      } 
     }); 
    }; 
})(jQuery); 

Répondre

1

Il est jQuery(id).addClass('redhighlight');

Edit # 1

jQuery(id).parent().addClass('redhighlight'); 

Cela se parent du champ validons et ajoutez la classe redhighlight. C'est censé fonctionner.

+0

Salut j. Je essayé d'ajouter cela, mais il ne semble pas fonctionner. La classe ne semble pas être appliquée à aucun élément de la page. Je pense que ce pourrait être au mauvais endroit dans le script. –

+0

Pour déterminer si c'était la bonne zone, j'ai remplacé le code par \t \t \t \t \t $ ('li'). AddClass ('redhighlight'); Cette tournée tous les éléments de la liste sur la page rouge plutôt que celui spécifique, mais il l'a fait en même temps que l'affichage du texte d'échec de validation. Je pense qu'il devrait être similaire à \t \t \t \t $ ('li'). Parent.addClass ('redhighlight'); mais ça ne fait rien. –

+0

voir ma réponse modifiée:] –

Questions connexes