2009-11-30 12 views
7

Obecnie używam wtyczki sprawdzania poprawności do sprawdzania poprawności formularza (przy użyciu formantów ASP.Net). Mam usuwane z reguły od standardowej konfiguracji w form.validate metody IE:JQuery validate dynamicznie dodawać reguły

$("form").validate({ 

    rules: { 
     ctl00$ContentPlaceHolder1$dgQuestions$ctl14$iRadList_Col0: "required" 
    } 

}); 

teraz mam je w różne funkcje, które dodają do ruless w zależności od tego, co kliknięciu przycisku. Działa to dobrze dla pól tekstowych, ale dla RadiobuttonList, gdy wtyczka próbuje dodać regułę, pojawia się błąd informujący, że element jest niezdefiniowany.

function addRuleSet() { 
    $("#ctl00$ContentPlaceHolder1$dgQuestions$ctl14$iRadList_Col0").rules("add", { required: true }); 

}

Myślę, że problemem jest to, że używam atrybut name (asp stawia $ w), aby zdefiniować grupę, przyciski radiowe należą do raczej niż id (, ale w statycznym ustawienia wszystkich elementów są określone przy użyciu atrybutu nazwy.Na razie nie jestem pewien, jak obejść dodawanie reguły dla grupy skojarzonych przycisków opcji, wszelkie porady byłyby docenione.Nie ma potrzeby, aby usłyszeć radę.Alternatywna lista niż poszczególne przyciski radiowe:

Odpowiedz

9

Możesz także zastosować regułę, ustawiając klasy na elemencie. Na przykład, jeśli dana klasa jest "wymagana" dla danych wejściowych, wówczas do tego elementu stosuje się wymaganą regułę. Aby to zrobić, należy użyć właściwości CssClass w formancie. Być może trzeba będzie eksperymentować z kontrolkami złożonymi, takimi jak RadioButtonList, aby upewnić się, że klasa jest stosowana do generowanych elementów wejściowych, a nie do kontenera. Jeśli masz z tym problemy, jednym ze sposobów jest dodanie klasy przy użyciu jQuery po wczytaniu strony w oparciu o selektor.

<asp:RadioButtonList id="RadList" runat="server" CssClass="required"> 
    ... 
</asp:RadioButtonList> 

lub

<script type="text/javascript"> 
    $(function() { 
      $(':radio').addClass('required'); 
      $('form').validate(); 
    }); 
</script> 

Do kompleksu, reguła klasa opartych można dodać nowe zasady korzystania addClassRules.

<script type="text/javascript"> 
    $(function() { 
     $.validator.addClassRules({ 
      range0to10: { 
        range: [0, 10] 
      }, 
      name: { 
        minlength: 2, 
        required: true 
      } 
     }); 
     $('form').validate(); 
    }); 
</script> 

<form ... > 
<input type="text" name="rating" id="rating" class="range0to10" /> 
<input type="text" name="firstName" id="firstName" class="name" /> 
<input type="text" name="lastName" id="lastName" class="name" /> 
</form> 
+0

Tak, dziękuję, doceniam to, że działa to w przypadku prostych reguł, takich jak wymaganie, ale czy można zdefiniować coś w rodzaju zakresu: [0,10]? – Monkeeman69

+0

W rzeczywistości, nie jest trudno, jeśli używasz metody addClassRules. Zaktualizuję. – tvanfosson

+0

Dobrze byłoby zobaczyć dzięki. – Monkeeman69

1

Po dniach to doprowadza mnie do szaleństwa, prosząc pytanie dało mi do myślenia, jak uzyskać element powrocie prawidłowo, i natknąłem się na tej metodzie przedstawieniu staright dalej, który pozwala mi to zrobić:

$("input:radio[name='ctl00$ContentPlaceHolder1$dgQuestions$ctl14$iRadList_Col0']").rules("add", { required: true }); 
+5

uwaga: możesz skrócić ten selektor do $ ("input: radio [nazwa $ = 'iRadList']"). Rules ~ the $ after name wybiera dowolny element, który kończy się iRadList <- łatwiej jest odczytać –

+0

To jest mądra wskazówka Konstabl. –

Powiązane problemy