2010-04-08 4 views
1

현재 GeekTantra의 jQuery Validate 플러그인을 편집하여 오류 메시지가 표시되면 입력 필드가 포함 된 상위 목록 항목에 클래스를 적용하려고합니다. 다음은 jQuery (id)를 추가 한 코드입니다. addClass (redhighlight); 저는 jQuery를 처음 접했을 정도로 피 묻은 명백한 실수를 저지르고 있습니다.jQuery - 부모 li에 클래스를 추가하기 위해 jqueryvalidate 변경

/** 
* @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); 

답변

1

그것은이 당신의 유효성을 검사하고있는 필드의 부모를 얻고 redhighlight 클래스를 추가 할 것입니다 편집 # 1

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

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

입니다. 일하기로되어있어.

+0

안녕하세요 j. 추가하려고했지만 작동하지 않는 것 같습니다. 클래스가 페이지의 요소에 적용되지 않는 것 같습니다. 나는 그것이 대본의 잘못된 장소에있을 수도 있다고 생각한다. –

+0

올바른 영역인지 확인하려면 코드를 \t \t \t \t \t $ ('li')로 바꿨습니다. addClass ('redhighlight'); 이렇게하면 특정 목록이 아닌 페이지의 모든 목록 항목이 빨간색으로 바뀌지 만 유효성 검사 실패 텍스트를 표시하는 것과 동시에 수행됩니다. 나는 그것이 유사해야한다고 생각한다 \t \t \t \t $ ('li'). parent.addClass ('redhighlight'); 그러나 그것은 단지 아무 것도하지 않습니다. –

+0

내 편집 된 답변보기 :] –

관련 문제