2012-03-09 10 views
5

jQuery validate eklentisini kullanıyorum. Sınıfı .percent kullanarak tüm girdi alanlarının toplamını hesaplamaya çalışıyorum. .percent alanların toplamı% 100'e eşit değilse, atma onayı hatası.jQuery dinamik yüzde alanını doğrula

Yüzde satırları dinamik bir kılavuzun bir parçasıdır ve çok sayıda olabilir. Aşağıda üzerinde çalıştığım şeyin bir örneğini göreceksiniz. AddMethod'un, her bir input.percent için tek bir zaman yerine çağrıldığını buluyorum. Senden çağrılmadan önce çağrıldığını söylemek isterim. Kod,

.

html

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

js

kurallar halinde sınıfı geçerken ben küçük bir başarı ile aşağıdaki kodu denedim

$.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({ 

}); 

Güncellemeler

$("#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%") 
); 

teklif sadece pas Ek yüzde alanlarını sorgulamamı sağlayan tek bir öğede şarkı söyle. Diğer bir konu, hata sınıfını yalnızca ilk yüzde öğeye ekler ve% 100 ölçüt karşılandıktan sonra ek öğeler hatayı bırakmaz.

Güncelleme 2

Bu benim yüzde doğrulama işe yaraması için geldim en yakın olanı. Çok etkili bir kod değildir, çünkü kuralların her döngüsünde yüzdelik alanların arasında geçiş yapmanız gerekir. Kod hala yüzde Böyle basit doğrulama için jquery kullanmayın eşit 100'e

$("#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

'percent' için bir sınıf kuralı eklediniz. Bu, 'percent' sınıfına sahip her girdinin doğrulama kuralınızı çalıştırması anlamına gelir. Nasıl çalışmasını istersin? –

+0

gönderildiğinde, tüm alanların toplamını .percent ile ve% 100'lük atma onayı hatasıyla eşit değilse belirtmek isterim. –

+0

'.rules()' yöntemini kullanırken, onu bir '.each()' şeklinde sarmanız gerekir, aksi halde, gördüğünüz gibi, eşleşen sınıfla yalnızca ilk öğeye uygulanır. – Sparky

cevap

0

olarak düzeltildi edildiğinde bir gönderme işlemin gerçekleştiğini artı keyUp tüm yüzde hataları silmez önce doğrular. Tüm aldatmanın jquery ile ilgili olduğunu anlamıyorum. Sadece kodunuzu çirkin görünüyor.

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

Bu işlevi çağırmak için ne kullanıyorsunuz? Sadece jQuery validate eklentisini kullanmaya çalıştım çünkü bu, projedeki diğer birçok doğrulama için kullanıldı. –

+0

Gerçekten jQuery kullanmıyorum, ancak doğrulayıcı eklentiye hızlı bir bakışta, bir bool olan bir .validate() olduğunu ve bu nedenle bunu kontrol ettiğinizi belirtin. Yani (XXX.validate() && myAnswerValidate()) ifadesinin ardından {...}.Bu 'çerçeve' dışında ama işe yarayacak. – FlavorScape