Проверка jQuery ASP.Net CheckBoxList - PullRequest
4 голосов
/ 07 февраля 2012

Прежде чем начать, я просто хотел бы заявить, что код, созданный ASP.NET для CheckBoxLists, возможно, является худшей вещью, которую я когда-либо видел.

В любом случае,

Я использую плагин проверки jQuery для проверки моей формы ASP.net. Существует требование для проверки некоторых флажков. Они генерируются элементом управления CheckBoxList.

<asp:CheckBoxList ID="CBContext" runat="server" RepeatColumns="2" 
              DataSourceID="sqlLibraryEnquiries" DataTextField="value" DataValueField="value" name="topic">
</asp:CheckBoxList>

Этот элемент управления производит следующую мерзость xHTML

<table id="MainContent_CBContext" name="topic">
    <tr>
        <td>
          <input id="MainContent_CBContext_0" type="checkbox" name="ctl00$MainContent$CBContext$0" value="Business" /><label for="MainContent_CBContext_0">Business</label>
        </td>
        <td>
          <input id="MainContent_CBContext_2" type="checkbox" name="ctl00$MainContent$CBContext$2" value="Legal" /><label for="MainContent_CBContext_2">Legal</label>
        </td>
    </tr>
    <tr>
        <td>
           <input id="MainContent_CBContext_1" type="checkbox" name="ctl00$MainContent$CBContext$1" value="Business Development" /><label for="MainContent_CBContext_1">Business Development</label>
        </td>
        <td>
           <input id="MainContent_CBContext_3" type="checkbox" name="ctl00$MainContent$CBContext$3" value="Library" /><label for="MainContent_CBContext_3">Library</label>
        </td>
    </tr>
</table>

Проблема, с которой я столкнулся, заключается в том, чтобы подключить плагин jQuery Validator к списку флажков. В моем разделе правил для всех других полей я могу получить к ним их имена например ctl00 $ MainContent $ tbActions: но все флажки имеют разные имена.

Правило cb_selectone не срабатывает, потому что объект, который я пытаюсь проверить, не найден. Я пробовал следующие идентификаторы. CBContext, ctl00 $ MainContent $ CBContext, MainContent_CBContext и флажки.

$("#Form1").validate({

     rules: {
     //WHAT GOES HERE???? --------->>    CBContext or ctl00$MainContent$CBContext or MainContent_CBContext or checkboxes all don't work: {
            cb_selectone: true
         }
      }
});

Спасибо за вашу помощь.

SM

Ответы [ 5 ]

3 голосов
/ 05 апреля 2013

Я сделал небольшую корректировку в методе JAVASCRIPT:

$.validator.addMethod('cb_selectone',
    function (value) {
        if ($('[id$=CBContext] input:checked').length > 0) {
            return true;
        }
        else
        {
            return false;
        }
    }, ""
);
1 голос
/ 08 февраля 2012

Хорошо, я решил это ......

Я создал новый метод проверки, который получает все объекты ввода типа, которые соответствуют регулярному выражению MainContent_CBContext.Это возвращает массив всех флажков.

Затем зациклите массив и проверьте, проверяется ли attr.Если какой-либо из них, тогда установите возвращение как true

$.validator.addMethod('cb_selectone', function (value, element) {
     if (debug) {
         $.jGrowl("Adding Validation");
     }
     var chkGroup = $("input[id^=MainContent_CBContext]");
     if (chkGroup.length > 0) {
         for (var i = 0; i < chkGroup.length; i++) {
             if ($(chkGroup[i]).attr('checked')) {
                 if (debug) {
                    // alert(i + $(chkGroup[i]).val());
                     $.jGrowl("Running loop " + i + " = " + $(chkGroup[i]).val());
                 }
                 return true;
             }
         }
         return false;
     }
     return false;
 }, 'Please select at least one option');

Часть, на которой я застрял, находила объект для запуска кода addMethod.В конце концов я просто использовал ...

ctl00$MainContent$CBContext$2: {
   cb_selectone: true
}

Это означало, что рядом с этим полем стоит ярлык, он чисто косметический.Важно то, что код валидатора был окончательно привязан к реальному объекту и запущен правильно.

SM

0 голосов
/ 07 февраля 2012

Вы пробовали что-то вроде этого:

$("#Form1").validate({
     rules: {
        <%=CBContext.UniqueID %>: {
            cb_selectone: true
         }
      }
});
0 голосов
/ 08 февраля 2012
$("input:checked") 

- это селектор, который захватит все отмеченные флажки

Я использовал это для простой проверки, например:

function testChecks() {
    var n = $("input:checked").length;
    if (n > 6) {
        alert("Please select up to six attributes.");
        return false;
    }
    if (n < 1) {
        alert("You must select at least one attribute.");
        return false;
    }
    return true;
}

Я думаю, вы могли бы просто сделать

$("input:checked").add("input:not(:checked)").Validate({
//....
});
0 голосов
/ 07 февраля 2012

Как список отображает делает его сложным.Я хотел бы рассмотреть возможность создания собственного метода проверки и использования идентификатора корневого элемента управления, а также метод проверки, анализирующий внутренние дочерние элементы:

...