0

SQLベースにあるユーザーの役割を処理する必要があります。すべてのロールにはチェックボックスがあり、「親」がチェックされている場合は「子」チェックボックスをチェックし、すべての「子」がチェックされている場合は「親」をチェックするという考え方です。

ページでこのスクリプトを試してみたところ、うまくいきましたが、asp.netでこれを機能させることはできません

これは私のスクリプトとコードです。

$(document).ready(function () {
    $('.parent').click(function () {
        if ($(this).is(':checked'))
            $(this).parent().find('.children input[type="checkbox"]').attr('checked', 'checked');
    });

    $('.children input[type="checkbox"]').click(function () {
        var numberOfCheckboxes = $(this).parents('.children').find('input[type="checkbox"]').length;

        if ($(this).parents('.children').find('input[type="checkbox"]').filter('input[checked=checked]').length == numberOfCheckboxes)
            $(this).parents('div').find('.parent').attr('checked', 'checked');
    });
});
<div>
    <asp:DataList ID="outerDataList" runat="server" DataSourceID="ObjectDataSource2" >
        <ItemTemplate>
            <li>
                <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'
                    Visible="False" />
                <asp:Label ID="typeLabel" runat="server" Text='<%# Eval("type") %>'
                    Visible="False" />
                <asp:CheckBox ID="chkEnabled" class="parent" runat="server"
                    Checked='<%# Eval("Enabled") %>' Text='<%# Eval("name") %>' />
            </li>
            <ul class="children">
                <asp:DataList ID="innerDataList" runat="server" DataSource='<%# Eval("Roles") %>'>
                    <ItemTemplate>                                
                        <li>
                            <asp:Label ID="idLabelInt" runat="server"
                                Text='<%# Eval("id") %>' Visible="False" />
                            <asp:Label ID="typeLabelInt" runat="server"
                                Text='<%# Eval("type") %>' Visible="False" />
                            <asp:CheckBox ID="chkEnabledInt" runat="server"
                                Checked='<%# Eval("Enabled") %>' Text='<%# Eval("name") %>' />
                        </li>
                    </ItemTemplate>
                </asp:DataList> 
            </ul>                   
        </ItemTemplate>
    </asp:DataList>
</div>
4

1 に答える 1

1

リストアイテムの終了タグを移動して、サブリストをカプセル化します。

<div>
    <asp:DataList ID="outerDataList" runat="server" DataSourceID="ObjectDataSource2" >
        <ItemTemplate>
            <li>
                <asp:Label ID="idLabel" runat="server" Text='<%# Eval("id") %>'
                    Visible="False" />
                <asp:Label ID="typeLabel" runat="server" Text='<%# Eval("type") %>'
                    Visible="False" />
                <asp:CheckBox ID="chkEnabled" class="parent" runat="server"
                    Checked='<%# Eval("Enabled") %>' Text='<%# Eval("name") %>' />
                <ul class="children">
                    <asp:DataList ID="innerDataList" runat="server" DataSource='<%# Eval("Roles") %>'>
                        <ItemTemplate>
                            <li>
                                <asp:Label ID="idLabelInt" runat="server"
                                    Text='<%# Eval("id") %>' Visible="False" />
                                <asp:Label ID="typeLabelInt" runat="server"
                                    Text='<%# Eval("type") %>' Visible="False" />
                                <asp:CheckBox ID="chkEnabledInt" runat="server"
                                    Checked='<%# Eval("Enabled") %>' Text='<%# Eval("name") %>' />
                            </li>
                        </ItemTemplate>
                    </asp:DataList>
                </ul>
            </li>
        </ItemTemplate>
    </asp:DataList>
</div>

childrenここでは、クラスが次のチェックボックスの親の子孫を探しています。

$(this).parent().find('.children input[type="checkbox"]')

現在お持ちのように、子ではなく、<ul>の兄弟として、このセレクターは機能しません。<li>

セレクターを壊すだけでなく、無効なHTMLでもあります。は、、、または要素の子である<li>必要があります。これらの要素の唯一の許可された子は要素です。(例外は、要素の代わりにフローコンテンツを含めることができます。)有効なHTMLを生成するには、親要素を、、、、またはで置き換える必要があります。<ul><ol><menu><li><menu><li><div><ul><ol><menu>

.closest()また、単一の要素を選択するが必要だと思います。セレクターに一致するすべて.parents()の祖先を選択するのではなく、セレクターに一致する最初の祖先です。

于 2012-11-19T18:20:26.423 に答える