使用jQuery和ASP.NET控件的多个控件实例

时间:2009-03-22 16:49:57

标签: asp.net javascript jquery

<script type="text/javascript">
    $(document).ready(function() {
        $('#pHeader').click(function() {
            $('#pBody').slideToggle('fast');
        });
    });
 </script>

<asp:Panel ID="pHeader" runat="server" CssClass="cpHeader">
    <asp:Label ID="lblText" runat="server" Text="Header" />
</asp:Panel>

<asp:Panel ID="pBody" runat="server" CssClass="cpBody">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat.
    Duis aute irure dolor in reprehenderit in voluptate velit
    esse cillum dolore eu fugiat nulla pariatur
</asp:Panel>

从上面我可以看到,我正在努力实现一个可折叠的面板。但是上面只会工作一次。如何让多个控件可以访问它,即如果页面上有10个面板?

谢谢你们!

3 个答案:

答案 0 :(得分:1)

如果您将CSS类$('.pHeader')分配给每个Panel,我猜您必须使用$('.pBody')$('#pHeader')而不是$('#pBody')pHeader

“#”字符选择带有“#”符号后面的id的元素。 “。”用于获取应用某个CSS类名称的所有元素。

所以,代码应该可行:

<script type="text/javascript">
$(document).ready(function() {
     $('.pHeader').click(function() {
         $('.pBody').slideToggle('fast');
     });
});
</script>

答案 1 :(得分:1)

试试这个:

$(function(){
  $('.cpHeader').click(function() {
    $(this).next('.cpBody').slideToggle('fast');
  });
});

如果您按ID选择(例如#pHeader),则只会影响一个节点,因为ID应该是唯一的。类要分配给多个节点。

另请注意缩短的第一行,jQuery将其作为$(document).ready()的快捷方式提供。

答案 2 :(得分:0)

您对ASP.NET的主要问题是,控件将在自定义控件中为每个元素创建自定义客户端ID。要避免此陷阱,请将您拥有的代码放在ascx自定义控件中,并将服务器端内联代码写入自定义客户端ID。通过这种方式,您可以让多个控件全部独立工作。

<asp:Panel ID="pHeader" runat="server" CssClass="cpHeader">
    <asp:Label ID="lblText" runat="server" Text="Header" />
</asp:Panel>

<asp:Panel ID="pBody" runat="server" CssClass="cpBody">
    Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat.
    Duis aute irure dolor in reprehenderit in voluptate velit
    esse cillum dolore eu fugiat nulla pariatur
</asp:Panel>



 <script type="text/javascript">
        $(function() {
            $('#<%=this.pHeader.ClientID %>').click(function() {
                $('#<%=this.pBody.ClientID %>').slideToggle('fast');
            });
        });
     </script>