9

jquery.validate.unobtrusive.js ile jQuery Doğrulama Eklentisi, v1.11.0,2/4/2013 kullanıyorum.Sayısal Aralık doğrulaması düzgün çalışmıyor jquery.validate.unobtrusive.js

Sayısal alan için Aralık doğrulaması hatasıyla karşılaşıyorum: Doğrulama, Min sayısı ve maksimum sayı ile alan sayısını karşılaştırmak yerine, Dizin Min ve Dize ile Dize değerini karşılaştırır.

Repro-adımlar:

Aşağıdaki HTML kullanarak, doğrulama aralığı 1-1000 ayarlayın: 7.

Beklenen sonuçlar:

<input name="Data.MaxConcurrentInstances" class="text-box single-line" id="Data_MaxConcurrentInstances" type="number" value="" data-val-number="The field Max concurrent instances must be a number." data-val="true" data-val-range-min="1" data-val-range-max="1000" data-val-range="The field Max concurrent instances must be between 1 and 1000."> 

Sen Test alanı değeri ayarlamak: Doğrulama başarılı. Hata yok.

Gerçek sonuçlar: Doğrulama başarısız. Dahili nedeni: "7" alfabesi dizgisi "1" ve "1000" dizgisinin ardına gider, çünkü aralarında değil.

Soru: Bu hata mı bilinmiyor? Bunun için en iyi çözüm nedir?

cevap

7

Ben de bu sorunu görüyoruz. Kodumu el ile güncelleyerek JQuery Doğrulama 1.11.1 güncellemesinde düzeltildiğini doğruladım. Güncelleme henüz NuGET havuzlarında yayınlanmadı.

buradan güncellemeyi indirebilirsiniz: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Microsoft CDN adresleri şunlardır: 3 Nisan dan

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js


Güncelleme:

NuGET paket güncellemesi kullanıma sunulmuştur. JQuery Doğrulama 1.11.1 ile NuGET aracılığıyla güncelleştirirseniz, sorun giderildi.

$.validator.methods.range = function (value, element, param) { 
     return this.optional(element) || (Number(value) >= Number(param[0]) && Number(value) <= Number(param[1])); 
    } 

Doğrulayıcı eklenti aralığı için gerçek kod dize dönüştürdükten üzerinde

range : function (value, element, param) { 
      return this.optional(element) || (value >= param[0] && value <= param[1]); 
     } 

aşağıdaki gibidir: Geçici

+0

. Gerçekten test ettin mi? Diğer konuları gördüğüm için, insanlar bunun önceki versiyonlar için bir süre önce tamir edildiğini söylüyordu, ama değildi. Ayrıca, NuGet'in güncellenmesi gereken herhangi bir bilgi var mı? –

+0

Merhaba. Evet, aslında başvurumda test ettim. Çok fazla alan geçerliliği ve hepsinin kırıldığı yerler vardı. Ben sadece (daha önce NuGET tarafından yüklenen) JS dosya içeriğini yeni sürümü (kopyala ve yapıştır) ile değiştirir ve tüm sayfaları şimdi davranıyor. NuGET paketi şimdiden yayınlandı. – Iravanchi

+0

Projelerim için NuGet yöneticisinde JQuery doğrulamasını yeni güncelledim ve Range validation işlemleri iyi çalışıyor. –

1

Şimdiye kadar bulunan en iyi çözüm yama başlatmak komut çalıştıran:

$(document).ready(function() { 
    window.setTimeout(function() { 
     //Fixing jquery Unobtrusive validation range integer bug 
     var allRules = $.data(document.forms[0], "validator").settings.rules; 
     for (var ruleName in allRules) { 
      var rule = allRules[ruleName]; 

      if (rule.range != undefined && rule.number) 
       for (var ri = rule.range.length-1; ri >=0 ; ri--) { 
        rule.range[ri] = Number(rule.range[ri]); 
       } 
     } 
    }, 100); 
}); 
+0

Aynı sorunu yaşıyorum. Yukarıdaki çalışma çevresinde, ancak sonraki/sonraki döngüde küçük bir hata var. 9. satırı şu şekilde değiştirin: "için (var ri = kural.range.length - 1; ri> = 0; ri--) {". Güncelleştirdim, ancak değişiklik hakem incelemesi tarafından onaylanmalıdır. – Pando

+0

Ters sırayla neden sıralamanızı önerdiğinizi açıklayabilir misiniz? –

+0

Daha iyi performans için, her yinelemede dizinin uzunluğunu değerlendirmek istemezsiniz. Bunu yapmanın birkaç farklı yolu var. Bilgi için teşekkürler http://www.openjs.com/articles/for_loop.php – Pando

0

bir jquery onaylama aralığı yöntemini geçersiz olacaktır value, param[0] and param[1] içinde Number(value), Number(param[0]) and Number(param[1]) kullanarak Numara türünde değer, String arasında değil, Sayı arasında uygun bir karşılaştırma yapılır.