Potrzebujesz lepszego sposobu sprawdzania poprawności pól wyboru ASP.NET za pomocą wtyczki sprawdzania poprawności jquery?
Problem:
Chcę sprawdzić poprawność niektórych pól wyboru ASP.NET za pomocą wtyczki sprawdzania poprawności jquery (znalezionej pod adresem:http://bassistance.de/jquery-plugins/jquery-plugin-validation/)
O co w tym wszystkim chodzi:
Nie można ustawić atrybutu nazwy pól wyboru ASP.NET (czy tak?). Zostanie automatycznie ustawiony, gdy formant zostanie renderowany i można go pobrać za pomocą
<%= emailCheckBox.UniqueID %>
Tak więc dwa pola wyboru:
<asp:CheckBox runat="server" ID="emailAcceptCheckBox" />Email<br />
<asp:CheckBox runat="server" ID="phoneAcceptCheckBox" />Phone<br />
wyrenderuje do:
<INPUT id="ctl00_MainContentPlaceHolder_emailAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$emailAcceptCheckBox">
<INPUT id="ctl00_MainContentPlaceHolder_phoneAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$phoneAcceptCheckBox">
Może jest bałagan w mieszaniu ASP.NET z wtyczką walidacyjną jquery, ale wolę wtyczkę walidacyjną jquery i działa ona poprawnie z wejściami i innymi polami.
Problem polega na tym, że wtyczka walidacji jquery chce grupować pola wyboru za pomocą atrybutu name pól wyboru. Atrybuty nazwy powinny być równe wszystkim polom wyboru i grupie.
Co ja zrobiłem:
Dodałem regułę do WSZYSTKICH pól wyboru za pomocą jquery:
$("#[id*='AcceptCheckBox']").each(function() { $(this).rules("add", { minchecked: 1 }); });
I dodałem własne sprawdzanie reguł dla pól wyboru:
jQuery.validator.addMethod("minchecked",
function(value, element, param) {
var noOfChecked = $("#[id*='AcceptCheckBox']:checked").length;
return noOfChecked >= param;
},
"Error");
(Ta reguła będzie miała zastosowanie do pól wyboru, których identyfikatory obejmują AcceptCheckBox, ale w tym przykładzie jest w porządku).
Kiedy dzwonię:
var result = $("#aspnetForm").validate().form();
Zwraca doskonale, jeśli moja walidacja się powiodła lub nie powiodła się!
ALE:
1) Nie uważam, że jest to bardzo czyste i ładne rozwiązanie. Jakaś lepsza rada?
2) Po uruchomieniu formularza validate (). () Przejdzie on przez WSZYSTKIE moje pola wyboru i dla każdego z nich zaznacz wszystkie pozostałe pola wyboru. To naprawdę nie jest konieczne. Jak mogę tego uniknąć?