1

グリッドに複数のチェック ボックスがあります。私のコードサンプルは次のとおりです。

<asp:Panel ID="FeatureGridViewPanel" runat="server" Visible="true" Width="100%">
    <div class="topline"></div>
    <div class="linebreak"></div>
    <div style="float:left; width:90%;">
        <asp:GridView ID="FeatureListGridView" runat="server" AutoGenerateColumns="False"
        CellPadding="4" ForeColor="#666666" GridLines="None" Width="100%">
            <Columns>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <asp:Label ID="FeatureNameHeaderLabel" runat="server" Text="Feature Name "
                        CssClass="GridViewTH"></asp:Label>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <div style="display: none;">
                            <asp:Label ID="FeatureIDLabel" runat="server" Text='<%#Eval("FeatureID")%>'>' ></asp:Label>
                        </div>
                        <asp:Label ID="FeatureNameLabel" runat="server" CssClass="GridViewLabel"
                        Text='<%#Eval("FeatureName")%>'>' ></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField>
                    <HeaderTemplate>
                        <asp:Label ID="FeatureStatusHeaderLabel" runat="server" Text="Feature Status"
                        Class="GridViewTH"></asp:Label>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="FeatureStatusCheckBox" runat="server" Checked='<%#Eval("isEnabled") %>'
                        />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <EditRowStyle />
        </asp:GridView>
    </div>
    <div class="topline"></div>
    <div class="linebreak"></div>
    <div style="margin:4px; float:right;">
        <asp:Button ID="CancelAllChagesButton" runat="server" Text="Cancel All Changes"
        OnClick="CancelAllChagesButton_Click" CssClass="CCButtonEnabled" />
        <asp:Button ID="SaveAllChangesButton" runat="server" Text="Save All Changes"
        OnClick="SaveAllChangesButton_Click" CssClass="CCButtonEnabled" />
        <asp:Button ID="ChangePlanButton" runat="server" Text="Change Plan" OnClick="ChangePlanButton_Click"
        CssClass="CCButtonEnabled" />
        <asp:Button ID="UpgradeFeatureButton" runat="server" Text="Update Feature"
        OnClick="UpgradeFeatureButton_Click" CssClass="CCButtonEnabled" />
    </div>
</asp:Panel>

変更がない場合は、SaveAllChangesButton と CancelAllChagesButton を無効にしたいだけです。チェックボックスに変更がある場合、SaveAllChangesButton と CancelAllChagesButton を有効にしたい。そうするために、私は次のようなjqueryコードを持っています:

  $(document).ready(function () {
      $('[id$=SaveAllChangesButton]').attr('disabled', 'disabled');
      $('[id$=CancelAllChagesButton]').attr('disabled', 'disabled');
      $(".disabled").click(function () {
          return false;
      });
      $('[id$=FeatureStatusCheckBox]').click(function () {

          $('[id$=CancelAllChagesButton]').removeAttr('disabled', 'disabled');
          $('[id$=SaveAllChangesButton]').removeAttr('disabled', 'disabled');

      });
  });

変更がない場合は正常に動作しますが、チェックボックスの一部に変更がある場合は、SaveAllChangesButton と CancelAllChagesButton を有効にする必要がありますが、ここでは私の状態ではこのボタンは有効になっていません。また、ユーザーが CancelAllChagesButton をクリックすると、SaveAllChangesButton と CancelAllChagesButton が無効になります。どうすればこれを達成できますか?

4

3 に答える 3

1

changeの代わりにチェックボックスをイベントにバインドしclick、属性ではなく無効なプロパティを設定します。input[id$=""]セレクターでこの部分は必要ありません。代わりに、このようにすることもできます。はるかに簡単です。これを示す jsFiddle を次に示します: http://jsfiddle.net/xXfUp/

$(document).ready(function () {
  var check = $('#FeatureStatusCheckBox'),
      save = $('#SaveAllChangesButton'),
      cancel = $('#CancelAllChagesButton');

  save.prop('disabled', true);
  cancel.prop('disabled', true);

  check.change(function () {
    if ($(this).prop('checked')) {
      save.prop('disabled', false);
      cancel.prop('disabled', false);
    } else {
      save.prop('disabled', true);
      cancel.prop('disabled', true);
    }
  });
});
于 2013-08-23T12:55:42.420 に答える