jQuery Validate - Gizli alanlar için doğrulamayı etkinleştir


186

JQuery validation plugin 1.9'un yeni sürümünde varsayılan olarak gizli alanların doğrulanması yoksayıldı . Ben textarea giriş alanı için CKEditor kullanıyorum ve alanı gizler ve iframe ile değiştirin. Alan var, ancak gizli alanlar için doğrulama devre dışı bırakıldı. Doğrulama eklentisi sürüm 1.8.1 ile her şey beklendiği gibi çalışır.

Benim sorum v1.9 doğrulama eklentisi ile gizli alanlar için doğrulamanın nasıl etkinleştirileceği.

Bu ayar çalışmaz:

$.validator.setDefaults({ ignore: '' });


"Yok sayılan gizli alanların doğrulanması" bağlantısı kesildi.
Beepye

Doğrulama benim için varsayılan olarak çalışıyor <input type="text" name="myfield" id="myfield" required="required" style="display: none;">. Herhangi bir ayarı değiştirmem veya özel bir şey yapmam gerekmiyordu.
squarecandy

Yanıtlar:


329

Eklentinin yazarı "tırnak işaretleri olmadan köşeli parantez" kullanmanız gerektiğini söylüyor ,[]

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

Release: Validation Plugin 1.9.0: "... Başka bir değişiklik, gizli öğeler içeren formların kurulumunu kolaylaştırmalı, bunlar artık varsayılan olarak yok sayılıyor (varsayılan olarak" yoksay "seçeneği": varsayılan olarak "gizlidir). Teorik olarak, bu Gerçekte olması muhtemel değilse, yoksay seçeneğini "[]" (tırnak işaretleri olmadan köşeli ayraçlar) olarak ayarlayarak düzeltebilirsiniz. "

Bu ayarı tüm formlar için değiştirmek için:

$.validator.setDefaults({ 
    ignore: [],
    // any other default options and/or rules
});

( İşlev .setDefaults()içinde olması gerekli değildir document.ready)

VEYA belirli bir form için:

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});

DÜZENLE :

Bazı gizli alanlarda doğrulamanın nasıl etkinleştirileceği, ancak yine de diğerlerinin yoksayılması için bu yanıta bakın .


DÜZENLEME 2 :

Bu yorum çıkmadan önce "bu işi yapmaz" , OP basitçe soruyor unutmayın jQuery doğrula'da eklentisi ve onun soru vardır hiçbirşey ASP.NET MVC veya herhangi diğer Microsoft çerçeve bu eklenti normal değiştirebilir nasıl bir ilgisi beklenen davranış. Bir Microsoft framework kullanıyorsanız, jQuery Validate eklentisinin varsayılan işlevi Microsoft unobtrusive-validationeklentisi tarafından üzerine yazılmıştır .

unobtrusive-validationEklenti ile mücadele ediyorsanız , lütfen bunun yerine şu cevaba bakın: https://stackoverflow.com/a/11053251/594235


26
Belki de aşağı seçmen bana yapıcı bir geri bildirim verebilir. Aksi takdirde, cevap tamamen bağımsızdır, uygun şekilde kaynaklanmıştır, kod örnekleri verir ve eklentinin yazarına göre teknik olarak doğrudur.
Sparky

1
@StijnVanBael, hayır, bu yanlış. Bkz: jsfiddle.net/F4w92/1 ve ayrıca jerick'in cevabı hakkındaki ikinci yorumuma bakın .
Sparky

4
İyi dedi @Sparky. Aşağı oylar muhtemelen bir tür intikam, ben de aynı karşılaştım ..
Omar

1
JSFiddle, kitaplıklar HTTPS yerine HTTP'ye yüklendiği için artık çalışmıyor. Güncelleme sürümü: jsfiddle.net/F4w92/31
hotips

1
Ben de son sürümü kullanarak benim için çalışmadığı için aşağı indirdi, kullanmak zorunda: $ ("form"). Data ("validator"). Settings.ignore = ""; diğer yanıt olarak @James feryat
Mark Homer

73

Bu, herkes için yararlı olması durumunda göze çarpmayan doğrulama vb. Ayarlamak için çerçeveyi bıraktığım bir ASP.NET MVC3 sitesi içinde benim için çalıştı:

$("form").data("validator").settings.ignore = "";

2
Bunu da seviyorum çünkü varsayılan davranışı değiştirmek yerine belirli durumlarda yapabileceğim anlamına geliyor.
Steve Owen

5
Bu şekilde yapmak zorundaydım, çünkü seçenekleri değiştirmek için .validate () kullanmak işe yaramadı.
Farinha

1
Bu mütevazi doğrulama için doğru çözümdür, diğer tüm çözümleri denedim, mütevazi kullanmadığı takdirde çalışabilirler. Mütevazi kullanıyorsanız doğru yerdesiniz.
Hakan Fıstık

Bootstrap Akordeon ile çalışmak için mütevazi doğrulama için de bu yöntemi kullanmak zorunda
bsod_

Bunu bu şekilde değiştirdiğimde form doğrulanmaz. Mütevazi .net çekirdek kullanıyorum
Offir Pe'er

64

Koyduğunuzdan emin olun

 $.validator.setDefaults({ ignore: '' });

İçeride değil$(document).ready


2
Mükemmel cevap. Belgelere bir bağlantı insanların öğrenmesi için iyidir, ancak düz bir cevap daha değerli imo. O OP doğru yolda idi, ama $ (belge) dışında koymak. Zaten hile.
Kevin Zych

3
@KevinZych, Görünüşe göre, $.validator.setDefaults()DOM hazır işleyicinin içine veya dışına yerleştirilmesi kesinlikle fark etmez . Karşılaştırma Bu jsFiddle için bu jsFiddle .
Sparky

İlginç @Sparky, kemanlarınız mükemmel bir kanıt. Geri dönüp bu çözümü kullanarak sabitlediğim koda bakıp neden DOM hazır işleyicisinin içinde olması gerektiğine karar verdim. Başka bir sebep olmalı.
Kevin Zych

Justin, doc'ye hazır olmanın neden sorunlara neden olduğunu açıklar. Bununla birlikte, bu cevap iyi bir seçenek değildir, çünkü doktor hazır bir şeyin doktor hazır olmadan ÖNCE çalışacağını garanti etmek zor. Doc.ready bunun dışındaki komut dosyalarının çalışmasını beklemez. Kişisel bir şey değil, ama bu güvenilir bir cevap değil.
AaronLS

Sonunda bir cevabım var ... Çok teşekkür ederim
sp9

29

Bunun neden işe yaramadığına biraz daha derinlemesine bakacağım çünkü haha ​​bilmeden gece uyuyamayan türden biriyim. 1/29/2013 tarihinde yayınlanan jQuery validate 1.10 ve Microsoft jQuery Unobtrusive Validation 2.0.20710.0 kullanıyorum.

JQuery Validate setDefaults yöntemini arayarak başladım ve sonlandırılmamış dosyanın 261 satırında buldum. Tüm bu işlev gerçekten json ayarlarınızı $.validator.defaultsjQuery Validate içinde tanımlanan diğer varsayılanlarla birlikte ignore özelliği ": hidden" olarak ayarlanmış olarak başlatılan mevcut ile birleştirmektir . Bu noktada görmezden geldik. Şimdi bu defaultults özelliğinin nereye başvurulduğunu görelim.

Nereye $.validator.defaultsbaşvurulduğunu görmek için kod üzerinden izlediğimde . Sadece form oluşturucu için yapıcı tarafından kullanıldığını fark ettim, satır 170 jQuery doğrulanmamış dosya doğrulamak.

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};

Bu noktada bir doğrulayıcı ayarlanan varsayılan ayarları birleştirir ve form doğrulayıcıya ekler. Doğrulama, vurgulama, vurgulama vb. Yapan koda baktığınızda, hepsi ignore özelliğini çekmek için validator.settings nesnesini kullanır. Bu nedenle, yoksaymayı setDefaults yöntemiyle ayarlayacağımızdan emin olmalıyız, bu durumda $ ("form"). Validate () çağrılmadan önce gerçekleşmelidir.

Asp.net MVC ve göze çarpmayan eklentiyi kullanıyorsanız, belgede validate adının çağrıldığı javascript'e baktıktan sonra fark edeceksiniz. Ben de benim setDefaults belgede çağırdım. Zaten komut dosyaları, jquery doğrulamak ve mütevazi sonra çalıştırılacak bloğu çünkü html içinde bu komutları çağrı olandan önce tanımladım. Bu yüzden çağrımın doğrulama sırasında gizli öğeleri atlamanın varsayılan işlevselliği üzerinde hiçbir etkisi olmadı. Burada birkaç seçenek var.

Seçenek 1 - Juan Mellado'nun işaret ettiği gibi, belgenin dışında bir çağrı alabilirsiniz. Zaten kod yüklenir yüklenmez çalıştırılacaktır. Tarayıcılar şimdi paralel komut dosyası yükleme yapabiliyoruz çünkü bu zamanlama hakkında emin değilim. Eğer biraz temkinliysem lütfen beni düzeltin Ayrıca, muhtemelen bunun etrafında yollar var ama ihtiyaçlarım için bu yolda gitmedim.

Seçenek 2a - Gözlerimdeki güvenli bahis $.validator.setDefaults({ ignore: '' });, belgenin içinin yerini değiştirmek. Zaten olay ile $("form").data("validator").settings.ignore = "";. Bu, verilen form için öğelerinizde her doğrulama yapılırken jQuery validate tarafından kullanılan ignore özelliğini değiştirir.

Seçenekler 2b - Kodu biraz daha inceledikten sonra $("form").validate().settings.ignore = "";, ignore özelliğini ayarlamanın bir yolu olarak da kullanabilirsiniz . Bunun nedeni, validate fonksiyonuna bakıldığında, form elemanı için $.data()fonksiyon aracılığıyla bir validator nesnesinin önceden kaydedilip kaydedilmediğini kontrol etmesidir . Form öğesiyle depolanmış bir doğrulayıcı nesne bulursa, başka bir tane oluşturmak yerine doğrulayıcı nesnesini döndürür.


Ayrıntılı cevap için teşekkürler!
davidallyoung

OP yanıtı olarak iyi iş MVC 5 benim için işe yaramadı
Mark Homer

analiziniz doğrulama sorunumu çözmemde bana çok yardımcı oldu. +1
pgcan

15

Bu benim için bir ASP.NET sitesinde çalıştı. Bazı gizli alanlarda doğrulamayı etkinleştirmek için bu kodu kullanın

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

Formun tüm öğeleri için doğrulamayı etkinleştirmek üzere bunu kullanın $("form").data("validator").settings.ignore = "";

Bunları içinde kullandığınızı unutmayın $(document).ready(function() { })


8

ignore: []Belirli bir form için belirli bir sayfaya ekledim , bu çözüm benim için çalıştı.

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });

1

Bu benim için çalışıyor.

jQuery("#form_name").validate().settings.ignore = "";

0

Doğrulama form gönderimi için benim için çalışıyordu, ancak seçilen seçim listelerine girdi için reaktif olay güdümlü doğrulama yapmıyordu.

Bunu düzeltmek için el ile kütüphane tarafından eklenen jquery doğrulama olayını tetiklemek için aşağıdakileri ekledim:

$(".chosen-select").each(function() {
  $(this).chosen().on("change", function() {
    $(this).parents(".form-group").find("select.form-control").trigger("focusout.validate");
  });
});

jquery.validate artık .validsınıfı temel seçim listesine ekleyecektir .

Uyarı: Bu, form girişleriniz için tutarlı bir html kalıbı gerektirir. Benim durumumda, dosyalanan her giriş a içine sarılır div.form-groupve her giriş vardır .form-control.


-15

Jquery doğrulama dosyanızda ignore: ": hidden" metnini bulup yorum yapmanız yeterlidir. Yorum yaptıktan sonra bunu doğrulamak için hiçbir gizli elemanı asla kaybetmeyecek ...

Teşekkürler


5
Bir üçüncü taraf kütüphanesindeki kodu rastgele yorumlamak asla iyi bir fikir değildir.
Jacques
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.