0

列が少ないグリッドがあります

<div id="AbstractDiv" runat="server" class="DivGrid">
<asp:GridView GridLines="None" ID="Abstract_GridView" runat="server" AutoGenerateColumns="False" CssClass="Grid" CellPadding="0"> 
<Columns>
<asp:TemplateField HeaderText="Select">
 <HeaderTemplate>
 <asp:CheckBox ID="AllChk" runat="server" TabIndex="3"  CssClass="smallCheckbox"/>
 </HeaderTemplate>
 <ItemStyle HorizontalAlign="Center" />
 <ItemTemplate>
 <asp:CheckBox ID="SelectChk" runat="server" TabIndex="5" CssClass="smallCheckbox" />
 </ItemTemplate>
 </asp:TemplateField>
<asp:TemplateField>
 <ItemTemplate>
 <asp:HiddenField ID="EqpNo" runat="server" value='<%# Bind("Equipmnt_No") %>' />
 </ItemTemplate>
</asp:TemplateField>
</Columns>
  </asp:GridView>
 </div>

いくつかのチェックボックスを一緒にチェックする際に問題に直面しています.列 EqpNo があり、EqpNo が選択された行と一致するすべての行がその行のチェックボックスをチェックする必要があります。

URLを参照しましたが、1行のみを確認できます。以下は、一致した行だけではなく、すべての行をチェックする Jquery コードです。

$('#<%=Abstract_GridView.ClientID %>').delegate('tr', 'click', function () {
 var SelectRowEqpNo = $(this).find("input[id*=EqpNo]").attr("value"); //trying to get the clicked row EqpNo
 $('#<%=Abstract_GridView.ClientID %> tr input[id*="EqpNo"]').each(function () {
   var Eachrw = $(this).val(); //getting each row EqpNo
   if (SelectRowEqpNo == Eachrw) { //Comparing both values if matching 
$('#<%=Abstract_GridView.ClientID %> tr input[id*="SelectChk"]:checkbox').attr('checked', true);              
}
  });
});
4

3 に答える 3

0

試す:

$('#<%=Abstract_GridView.ClientID %>').on('click', 'tr', function () {

 var SelectRowEqpNo = $(this).find("input[id*=EqpNo]").val(); //trying to get the clicked row EqpNo

 $('#<%=Abstract_GridView.ClientID %> tr input[id*="EqpNo"]').each(function () {
   var Eachrw = $(this).val(); //getting each row EqpNo
   if (SelectRowEqpNo === Eachrw) { //Comparing both values if matching 
   $('#<%=Abstract_GridView.ClientID %> tr input[id*="SelectChk"]:checkbox').attr('checked', true);              
     }
  });
});
于 2013-01-16T12:52:15.440 に答える
0

私はcssクラスを隠しフィールドに追加します(より単純なjQueryセレクターのためだけに):

<asp:HiddenField ID="EqpNo" runat="server" value='<%# Bind("Equipmnt_No") %>' class="EqpNo" />

UPD:おっと。そのクラスはそこではまったく許可されていないようです...奇妙な...それを反映するようにコードが更新されました。

そして、以下のようなコードを使用するよりも:

$('.DivGrid').delegate('tr', 'click', function () {
      var SelectRowEqpNo = $(this).find("input.EqpNo").val();
      $(this).closest("table").find('tr input[id*="SelectChk"][value="'+SelectRowEqpNo+'"]')
      .each(function() {
            $("this").closest("tr").find(".smallCheckbox").attr('checked', true);
      });
  });

括弧に間違いがないことを願っています)

また、すべての類似したものを削除し、現在クリックされているtrに関連する要素( 、など)#<%=Abstract_GridView.ClientID %>を検索する関数に置き換えたことにも注意してください。今ではIDから完全に独立しており、コードは少しすっきりしていて、外部クラスに簡単に配置できます.closest.find

于 2013-01-16T12:52:23.040 に答える
0

これがコード全体の動作です。if ブロックの jQuery 行を変更しました。

<asp:GridView GridLines="None" ID="Abstract_GridView" runat="server" AutoGenerateColumns="False"
        CssClass="Grid" CellPadding="0">
        <Columns>
            <asp:TemplateField HeaderText="Select">
                <HeaderTemplate>
                    <asp:CheckBox ID="AllChk" runat="server" TabIndex="3" CssClass="smallCheckbox" />
                </HeaderTemplate>
                <ItemStyle HorizontalAlign="Center" />
                <ItemTemplate>
                    <asp:CheckBox ID="SelectChk" runat="server" TabIndex="5" CssClass="smallCheckbox" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:HiddenField ID="EqpNo" runat="server" Value='<%# Bind("Equipmnt_No") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Label ID="lbl" runat="server" Text='<%# Bind("Equipmnt_No") %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

そしてjQueryブロック:

 $(document).ready(function () {
        $('#<%=Abstract_GridView.ClientID %>').delegate('tr', 'click', function () {
            var SelectRowEqpNo = $(this).find("input[id*=EqpNo]").attr("value"); //trying to get the clicked row EqpNo
            $('#<%=Abstract_GridView.ClientID %> tr input[id*="EqpNo"]').each(function (i, v) {
                var Eachrw = $(this).val(); //getting each row EqpNo
                if (SelectRowEqpNo == Eachrw) { //Comparing both values if matching 
                    $(this).parents("tr").find('input[id*="SelectChk"]:checkbox').attr('checked', true);
                }
            });
        });
    });

基本的には、DOM を上にトラバースする所有者を見つけてから、DOM を再び下にトラバースするチェックボックスを見つけます。

お役に立てれば。

于 2013-01-16T12:59:26.720 に答える