按CssClass和Id过滤复选框

时间:2011-03-13 00:41:30

标签: jquery asp.net jquery-ui

我有一个asp.net listview:

<asp:ListView ID="MyListView" runat="server" GroupItemCount="3" >
          <LayoutTemplate>
             <table>
               <tr>
                 <td>
                   <table border="0" cellpadding="0">
                     <asp:PlaceHolder runat="server" ID="groupPlaceHolder"></asp:PlaceHolder>
                   </table>
                 </td>
               </tr>
             </table>
          </LayoutTemplate>
          <GroupTemplate>
            <tr>
              <asp:PlaceHolder runat="server" ID="itemPlaceHolder"></asp:PlaceHolder>
            </tr>
          </GroupTemplate>
          <ItemTemplate>
            <td>
              <input class="Status-Checkbox"  id="StatusCheckBox" runat="server"  
                 type="checkbox" value=<%#Eval("StatusId")%> />
            </td>
          </ItemTemplate>
    </asp:ListView>

在jquery中,我有:

var MyStatId=MyStatId

问题是,当呈现页面时,复选框具有动态ID。 所以我必须通过

过滤复选框
  

类=状态-复选框

和价值,如:

$('.Status-Checkbox').find(value=MyStatId)

谁已经做过类似的事?

3 个答案:

答案 0 :(得分:0)

这应该有用。

$('.Status-Checkbox[val="whatever"]').each(function(){//dostuff});

处理动态ID时。我更喜欢添加自定义属性而不是依赖ID。它确实使查找项目变得更加容易。例如,如果你使用你的PK名称(“fieldName”)作为属性,你可以很容易地找到它:

$('.Status-Checkbox[fieldName="whatever"]').each(function(){//dostuff});

IMO让您更清楚地了解您所寻找的内容(如果有其他人必须处理您的代码)。

答案 1 :(得分:0)

较新版本的ASP.net包含的功能可让您更好地控制ID。你可以考虑一下。

我还做了一些事情,其中​​动态创建的ID被写入Javascript变量,如var jsVariableName='<%= Me.Textbox1.ClientID %>';。对于列表类型控件来说这有点挑战性,但我敢打赌它可以完成。

答案 2 :(得分:0)

您需要使用ASP.NET 4.0的新功能 - ClientIDMode。您可以为服务器控件设置一个选项,以明确指定其clientId生成的方式。在这种情况下,您可以使用静态模式:

    <ItemTemplate>
        <td>
            <input class="Status-Checkbox" ClientIDMode="Static" 
id="StatusCheckBox_<%#Eval("StatusId")%>" runat="server" type="checkbox" />
        </td>
    </ItemTemplate>

因此,您的复选框将包含

等ID
StatusCheckBox_(YourStatusId1)
StatusCheckBox_(YourStatusId2) 

等。 在生成的HTML中 所以你可以直接通过

访问它们
$('#StatusCheckBox_' + MyStatId)...

但你应该检查这个ID是否是唯一的