2012-03-09 5 views
5

jQuery 유효성 검사 플러그인을 사용하고 있습니다. 모든 입력 필드의 합계를 .percent 클래스를 사용하여 계산하려고합니다. .percent 필드의 합계가 100 %가 아닌 경우 유효성 검사 오류가 발생합니다.jQuery 동적 백분율 필드 유효성 검사

퍼센트 행은 동적 그리드의 일부이며 매우 숫자가 있습니다. 제가 아래에서 일해 온 것의 샘플을 보게 될 것입니다. addMethod가 한 번이 아닌 모든 input.percent에 호출된다는 것을 알았습니다. 제출이 호출되기 전에 호출되고 있다고 말하고 싶습니다.

코드입니다.

HTML

<div class="row"> 
    <input value="" class="percent"/> 
</div> 
<div class="row"> 
    <input value="" class="percent"/> 
</div> 

JS

규칙에 클래스를 통과 할 때 나는 작은 성공에 다음 코드를 시도했습니다

$.validator.addClassRules({ 
    percent: {percent:true} 
}); 

$.validator.addMethod("percent", 
    function cals(value, element) { 
     // all the fields that start with 'coeff' 
     var percent = element; 
     var total = 0; 
     for (var i = 0; i < percent.length; i++) { 
      total += Number(percent[i].value); 
     } 
    return total == 100; 
}, $.format("Percentage fields most total up to 100%")); 

$("form").validate({ 

}); 

업데이트

$("#modify-funding .percent").rules('add', {sum: 100}); 

$.validator.addMethod("sum", function (value, element, params) { 
     var sumOfVals = 0; 

     $("#modify-funding .percent").each(function() { 
      sumOfVals = sumOfVals + parseInt($(this).val().length ? $(this).val() : 0); 
     }); 
     if (sumOfVals == params) return true; 
     return false; 
    }, 
    $.format("Percentage fields most total up to 100%") 
); 

는 단지입니다 우선권 추가 백분율 필드를 쿼리 할 수없는 단일 요소에서 노래하십시오. 다른 문제는 첫 번째 .percent 요소에만 오류 클래스를 추가하고 100 % 조건이 충족되면 추가 요소가 오류를 해제하지 않는다는 것입니다.

업데이트 2

이것은 유효성 검사 작업을 얻는 데 가장 근접한 것입니다. 규칙을 반복 할 때마다 모든 백분율 필드를 반복해야하므로 매우 효율적인 코드는 아닙니다. 코드는 여전히 %가 같은 간단한 확인을 위해 jQuery를 사용하지 마십시오 동일한 100

$("#modify-funding .percent").each(function() { 
    $(this).rules('add', {sum: [".percent"]}); 
}) 

$.validator.addMethod("sum", function (value, element, params) { 
    var sumOfVals = 0; 
     $(params[0]).each(function() { 
      sumOfVals += parseFloat($(this).val().length ? $(this).val() : 0); 
     }); 

     if (sumOfVals == 100) return true; 
     return false; 
    }, 
    $.format("Percentage fields most total up to 100%") 
); 
+0

'퍼센트'에 대한 클래스 규칙을 추가했습니다. 즉, '%'클래스를 가진 모든 입력은 유효성 검사 규칙을 실행합니다. 어떻게 작동 시키길 원합니까? –

+0

제출시, 나는 모든 필드의 합계를 .percent와 같게하고 100 %와 같지 않은 경우 유효성 검증 오류를 발생 시키길 원합니다. –

+0

'.rules()'메쏘드를 사용할 때는'.each()'로 묶어야합니다. 그렇지 않으면, 앞에서 보았 듯이 일치하는 클래스가있는 첫 번째 요소에만 적용됩니다. – Sparky

답변

0

에 수정되었습니다 때 제출 작업이 발생한 플러스의 keyup에있는 모든 %의 오류를 지우지 않습니다하기 전에 유효성을 검사합니다. jquery에 대한 모든 과장된 점을 정말로 이해하지 못합니다. 단지 코드가 모두보기 흉하게 보입니다.

function validate() { 
     var ret = false; 
     var total = 0; 
     var elems = document.getElementsByTagName('*'), i; 
     for (i in elems) 
      if (elems[i].className == "percent") 
       total += parseFloat(elems[i].value); 
     if (total == 100) 
      ret = true; 
     return ret; 
    } 
+0

무엇을 사용하여 함수를 호출하고 있습니까? jQuery 유효성 검사 플러그인은 프로젝트 내의 다른 많은 유효성 검사에 사용되었으므로 사용하려고했습니다. –

+0

jQuery를 사용하지는 않지만 유효성 검사기 플러그인을 살펴보면 bool 인 .validate()가 있다는 것을 알 수 있습니다. 따라서 어딘가에이 항목을 확인하고있는 것입니다. 그래서 (XXX.validate() && myAnswerValidate())를 누른 다음 {...} 할 수 있습니다.이것은 '프레임 워크'외부에 있지만 작동 할 것입니다. – FlavorScape