Отключение текстового поля, когда флажок установлен, не работает - PullRequest
0 голосов
/ 05 августа 2020

У меня есть сценарий, который я использовал для отключения текстового поля всякий раз, когда флажок снят в gridview:

$(function () {
    //Enable Disable all TextBoxes when Header Row CheckBox is checked.
    $("[id*=chkHeader]").bind("click", function () {
        var chkHeader = $(this);

        //Find and reference the GridView.
        var grid = $(this).closest("table");

        //Loop through the CheckBoxes in each Row.
        $("td", grid).find("input[type=checkbox]").each(function () {

            //If Header CheckBox is checked.
            //Then check all CheckBoxes and enable the TextBoxes.
            if (chkHeader.is(":checked")) {
                $(this).attr("checked", "checked");
                var td = $("td", $(this).closest("tr"));
                $("input[type=text]", td).removeAttr("disabled");
            } 
            else {
                $(this).removeAttr("checked");
                var td = $("td", $(this).closest("tr"));
                $("input[type=text]", td).attr("disabled", "disabled");
                $("input[type=text]", td).val = ""
            }
        });
    });

    //Enable Disable TextBoxes in a Row when the Row CheckBox is checked.
    $("[id*=chkResult]").bind("click", function () {

        //Find and reference the GridView.
        var grid = $(this).closest("table");

        //Find and reference the Header CheckBox.
        var chkHeader = $("[id*=chkHeader]", grid);

        //If the CheckBox is Checked then enable the TextBoxes in thr Row.
        if (!$(this).is(":checked")) {
            var td = $("td", $(this).closest("tr"));
            $("input[type=text]", td).attr("disabled", "disabled");
            $("input[type=text]", td).val = ""
        } 
        else {
            var td = $("td", $(this).closest("tr"));
            $("input[type=text]", td).removeAttr("disabled");
        }

        //Enable Header Row CheckBox if all the Row CheckBoxes are checked and vice versa.
        if ($("[id*=chkResult]", grid).length == $("[id*=chkResult]:checked", grid).length) {
            chkHeader.attr("checked", "checked");
        } 
        else {
            chkHeader.removeAttr("checked");
        }
    });
});

Код ASP:

<table>
    <tr>
        <asp:Panel ID="pnlItems" runat="server" Height="100%">
           <td colspan="3" class="PrimaryLabelTop" style="height: auto" >
                <asp:Label ID="lbItems" runat="server" CssClass="PrimaryLabel" meta:resourcekey="lblNecropsyFoundResource1" >
                    Necropsy: Itemized Information
                </asp:Label>
                <br />
                <br />
                <asp:GridView ID="gvItems" runat="server" EmptyDataText="No data available." Width="100%" DataSourceID="dsItems" EnableModelValidation="True" AutoGenerateColumns="false">
                    <Columns>
                        <asp:BoundField DataField="ValueID" HeaderText="ValueID" SortExpression="NecropsyValueID" InsertVisible="False" ReadOnly="True" Visible="false" />
                        <asp:BoundField DataField="GroupE" HeaderText="Group Description" SortExpression="GroupE" ReadOnly="true"/>
                        <asp:BoundField DataField="ItemE" HeaderText="Item Description" SortExpression="ItemE" ReadOnly="true"/>   
                        <asp:TemplateField HeaderStyle-Width="10%" HeaderStyle-HorizontalAlign="Center" ItemStyle-Width="10%" ItemStyle-HorizontalAlign="Center">
                            <HeaderTemplate>
                                <asp:CheckBox ID="chkHeader" runat="server"/>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:CheckBox ID="chkResult" runat="server" Checked='<%# IIf(Eval("Result").ToString() = "Selected", True, False) %>' AutoPostBack="True"/>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Comment" SortExpression="Commment">
                            <ItemTemplate>
                                <asp:TextBox ID="txtComment" Visible='<%# Bind("AllowMemo")%>' runat="server" Text='<%# Bind("Comment") %>'></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="ValueID" HeaderText="ValueID" InsertVisible="False" ReadOnly="True" SortExpression="ValueID" Visible="false"/>
                    </Columns>
                </asp:GridView>
                <br />
                <asp:ObjectDataSource ID="dsItems" runat="server" SelectMethod="GetItemValues" TypeName="HealthWeb.HealthWS.Health">
                    <SelectParameters>
                        <asp:QueryStringParameter DefaultValue="0" Name="SampleID" QueryStringField="QS_LABSAMPLE" Type="Int32" />
                    </SelectParameters>
                </asp:ObjectDataSource>
            </td>
        </asp:Panel>
    </tr> 
    <tr>
        <td class="PrimaryLabelTop" />
    </tr>
    <tr>
        <td>
            <asp:Button ID="btnSave" runat="server" Text="Save" meta:resourcekey="btnSaveResource1" height="26px" style="text-align: center" width="60px" />
            <asp:Button ID="btnClose" runat="server" Text="Close" meta:resourcekey="btnCloseResource1" height="26px" style="text-align: center" width="60px" />
        </td>
    </tr>
</table>

Проблема 1: [ chkHeader] работает нормально. Но когда я индивидуально пытаюсь проверить один [chkResult], он очищает [txtComment], но затем активирует все txtComment вместо конкретной строки, которую я только что проверяю. отключить текстовые поля, когда флажок снят?

Спасибо!

1 Ответ

0 голосов
/ 05 августа 2020

У вас есть autopostback = true, поэтому он будет возвращен, и ваше значение будет потеряно. Обрабатывайте элементы управления в методе onRowDataBound, там вы можете установить элементы управления каждой строкой и их свойства.

...