Проблема:
Я хочу проверить некоторые ASP.NET-флажки, используя плагин проверки jquery (находится по адресу: http://bassistance.de/jquery-plugins/jquery-plugin-validation/)
О чем это все:
Невозможно установить атрибут имени для флажков ASP.NET (или это так?). Он будет установлен автоматически после визуализации элемента управления и может быть получен с помощью
<%= emailCheckBox.UniqueID %>
Итак, два флажка:
<asp:CheckBox runat="server" ID="emailAcceptCheckBox" />Email<br />
<asp:CheckBox runat="server" ID="phoneAcceptCheckBox" />Phone<br />
отобразит:
<INPUT id="ctl00_MainContentPlaceHolder_emailAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$emailAcceptCheckBox">
<INPUT id="ctl00_MainContentPlaceHolder_phoneAcceptCheckBox" type="checkbox" name="ctl00$MainContentPlaceHolder$phoneAcceptCheckBox">
Возможно, смешивать ASP.NET с плагином проверки jquery, но я предпочитаю плагин проверки jquery, и он отлично работает с входными данными и другими полями.
Проблема в том, что плагин проверки jquery хочет сгруппировать флажки, используя атрибут name из флажков. Это имя атрибута должно быть одинаковым для всех флажков и группы.
Что я сделал:
Я добавил правило для ВСЕХ флажков, используя jquery:
$("#[id*='AcceptCheckBox']").each(function() { $(this).rules("add", { minchecked: 1 }); });
И добавил собственную проверку правил для флажков:
jQuery.validator.addMethod("minchecked",
function(value, element, param) {
var noOfChecked = $("#[id*='AcceptCheckBox']:checked").length;
return noOfChecked >= param;
},
"Error");
(Это правило будет применяться для флажков, идентификаторы которых включают AcceptCheckBox, но в этом примере это нормально).
Когда я звоню:
var result = $("#aspnetForm").validate().form();
Прекрасно возвращается, если моя проверка прошла успешно или не удалась!
НО:
1) Я не чувствую, что это очень чистое и приятное решение. Любой лучший совет?
2) Когда я запускаю validate (). Form (), он проходит через ВСЕ мои флажки и для каждого из них проверяет все остальные флажки. Это действительно не обязательно. Как я могу избежать этого?