2011-12-16 18 views
9

Yani durum şudur: jquery.multiselect eklentisini kullanarak şu anda geçerli olan jquery.validate eklentisini kullanan diğer bir formda (metin giriş alanları, float değer aralığına sahip tek metin girişi) bir onay kutusu ekleme doğru şekilde.jquery.Multiselect Dropdown ile jquery.Validate nasıl kullanılır?

Doğrulama kuralları ekleme girişiminde bulunduğumda, çoklu seçim engellememi doğrulamak için jquery.validate alamıyorum. İşte benim kod snippet'leridir (gerekli tüm eklentileri yüklenir varsayar - kullanılan sürümleri için aşağıya bakınız):

HTML:

<form action="some/action" id="myForm" method="POST"> 
    Input 1: <input type="text" value="" name="input1" maxlength="200" id="input1"><br/> 
    Input 2: <input type="text" value="" name="input2" maxlength="100" id="input2"><br/> 
    Input 3: <input type="text" value="" name="input3" maxlength="50" id="input3"><br/> 
    Select: <select class="someSelect" name="mySelect" id="mySelect" multiple="multiple"> 
     <option value="some_val1">Some Value</option> 
     <option value="some_val2">Some Other Value</option> 
    </select> 
    <input type="submit" value="Submit" /> 
</form> 

JavaScript:

$(document).ready(function() { 
    $('#mySelect').multiselect({ 
     noneSelectedText: 'Select Something (required)', 
     selectedList: 3, 
     classes: 'my-select' 
    }); 

    $.validator.addMethod("needsSelection", function(value, element) { 
     return $(element).multiselect("getChecked").length > 0; 
    }); 

    $.validator.addMethod("isPercent", function(value, element) { 
     return parseFloat(value) >= 0 && parseFloat(value) <= 100; 
    }); 

    $.validator.messages.needsSelection = 'You gotta pick something.'; 
    $.validator.messages.isPercent = 'Must be between 0% and 100%'; 

    $('#myForm').validate({ 
     rules: { 
      mySelect: "required needsSelection", 
      input1: "required isPercent", 
      input2: "required", 
      input3: "required" 
     }, 
     errorClass: 'invalid' 
    }); 
}); 

Sürümler Sürümler arasında uyumluluk ile ilgili açık/bilinen bir sorun varsa, sonra yükseltebilirim Bu sorunu çözdüyse, ancak en yeni sürümleri kullanarak benim amaçlarım için test ettim ve sorunumu çözmedim.

jQuery: 1.4.4

jquery.validate: 1.9.0

jquery.multiselect: 1.8

Ve her zaman olduğu gibi, daha fazla bilgiye nereden sağlayabilir mümkün/gerekli.

cevap

12

Demek ki ben multiselect batıyordu kurallar gerçekten seçme bağlı ediliyordu görünüyor, Ancak, orijinal seçim kutusu jquery.multiselect, jquery.validate tarafından :hidden olduğundan, varsayılan olarak herhangi bir gizli girişi yok sayar.

Çözüm (kendim değil - bir iş arkadaşınız bulamadı) jquery.validate için ignore ayarlarını kullanmaktır. Ne olursa olsun seçici ignore ayar jquery .not() konur İle geçirilir, böylece çözüm kullanmak aslında burada bir çift negatif:

$('#myForm').validate({ 
    rules: { 
     mySelect: "required needsSelection", 
     input1: "required isPercent", 
     input2: "required", 
     input3: "required" 
    }, 
    ignore: ':hidden:not("#mySelect")', //Tells it to check the hidden select 
    errorClass: 'invalid' 
}); 

Phew!

+0

Gerçekten bana yardım ettin! :) –

+1

Neden her zaman sorunlarımı ve çözümleri onlara göndermeyi denedim - yardım ettiğim için mutluyum! :) – Mattygabe

+0

Bana yardım ettin, üç! Söylediğin gibi, "Phew" – HPWD

0

İki seçim seçeneğinizin bir değer taşıdığı gibi görünüyor. seçilen bir şey değeriyle üstündeki seçeneği ve ekleme

value="some_val1" 

Dene:

<option selected="" value="">Please Select Something</option> 
+0

yardımcı Umut:

Aslında, ben sadece karşılaştı durum ben çok adımlı form için bölümü tarafından doğrulamak istedim çünkü başka hiçbir yolu yoktu. – Mattygabe

0

Başka bir olası çözüm açıkça doğrulayan unsurlar belirtmektir:

$("form").children("input, select, textarea").valid() 

gizli yanı seçmek doğrular O.

$("form").find("[data-stepIndex='1']").children("input, select, textarea").valid() 

o Bu sorunu çözmezse birisi