найти вложенный список флажков в элементе управления повторителем с помощью jquery

Используя VS 2008, у меня есть элемент управления Repeater с вложенными элементами, и я хочу выбрать один из них (флажки) с помощью jquery.

<asp:Repeater runat="server" ID="storesRep" DataSourceID="storeSqlDataSource" OnItemDataBound="StoresRep_ItemDataBound">
        <ItemTemplate>
            <table style="padding:0px">
            <tr>
                <td style="width:200px"><asp:Label ID="infoLbl" runat="server">Choose stores for upload:</asp:Label>&nbsp;&nbsp;&nbsp;&nbsp;</td>
                <td style="width:110px"><asp:Label ID="storeLbl" runat="server" Text='<%# Bind("Name") %>'></asp:Label>&nbsp;&nbsp;</td>
                <td><asp:CheckBox runat="server" ID="storeCheck" CssClass="storeCheck" /></td>
            </tr>
            </table>
        </ItemTemplate>
        <FooterTemplate>
            <table runat="server" id="footerTbl" visible="false" style="padding:0px">
                <tr>
                    <td style="width:200px"><asp:Label ID="infoLbl" runat="server">Choose stores for upload:</asp:Label>&nbsp;&nbsp;&nbsp;&nbsp;</td>
                    <td><asp:Label ID="lblEmptyData" Text="No Stores found." runat="server" ForeColor="GrayText"></asp:Label></td>
                </tr>
            </table>        
         </FooterTemplate>
    </asp:Repeater>

Вот мой сценарий

$('#<%= uploadBtn.ClientID %>').click(
    function() {

        //check if store was chosen from list
        var storeChecked = false;
        $('#<%= storeCheck.ClientID %>').each(function() {

            if ($(this).attr('checked'))
                storeChecked = true;
        });
        if (storeChecked == false) {
            alert("Upload is only possible if a store has been chosen from list.");
            return false;
        }

Я получаю ошибку компилятора "storeCheck не является известным именем в текущем контексте".


person AGuyCalledGerald    schedule 11.03.2011    source источник
comment
Как вы пытаетесь выбрать его?   -  person Richard Dalton    schedule 11.03.2011
comment
При выборе... вы имеете в виду, когда селектор jquery запускается на стороне клиента? Я спрашиваю из-за слова компилятор.   -  person Walker    schedule 11.03.2011


Ответы (1)


Это не работает, потому что вы пытаетесь получить доступ к storeCheck, используя его идентификатор, а storeCheck существует только в контексте повторителя.

Вместо этого вы должны использовать класс. Итак, измените:

$('#<%= storeCheck.ClientID %>').each(function() {

to

$('.storeCheckBox').each(function() {

Вы также можете изменить свой код на этот, который просто проверяет, есть ли какие-либо отмеченные флажки с классом storeCheck:

$('#<%= uploadBtn.ClientID %>').click(function() {
    if($('span.storeCheck input:checked').length == 0) {
        alert("Upload is only possible if a store has been chosen from list.");
        return false;
    }
});

Изменен код, так как кажется, что asp.net помещает флажок внутри диапазона с предоставленным вами классом, а не применяет его прямо к флажку.

jsfiddle — http://jsfiddle.net/infernalbadger/rAVLA/1/

person Richard Dalton    schedule 11.03.2011
comment
Нет, не помогает! Оповещение срабатывает всегда, даже если выбираю магазин из репитера. - person AGuyCalledGerald; 11.03.2011
comment
Я добавил тест jsfiddle, который работает. Можете ли вы проверить свой против этого? - person Richard Dalton; 11.03.2011
comment
Теперь обновлено для учета того, как asp.net обрабатывает атрибут cssclass для флажков. Надеюсь, теперь это должно работать. - person Richard Dalton; 11.03.2011