2012-09-10 18 views
1

我有一个中继器,里面有一个div和按钮。 但是,正如你所知,在中继器ID更改。像
ctl00_ContentPlaceHolder1_rptToogle_ ctl00 _btnToogle ctl00_ContentPlaceHolder1_rptToogle_ ctl01 _btnToogle ctl00_ContentPlaceHolder1_rptToogle_ ctl02 _btnToogle为什么我要用转发器切换问题?

该代码是工作,但它的工作对所有。我的意思是当我点击每个div是开放的。 我只想打开我选择的,不是全部。我该如何解决它?

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('[id*="btnToogle"]').click(function() { 
      $('[id*="divToogle"]').slideToggle(100); 
      return false; 
     }); 
    }); 
</script> 

<asp:Repeater id="rptToogle" runat="server"> 
    <ItemTemplate> 
     <asp:Button id="btnToogle" runat="server" Text=""></asp:Button> 
     <div id="divToogle" runat="server" style="display:none;"> 
      asdasd, asdasd, asdasd 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 
+0

我修改了我的答案,以防你早先看过它 – Learning

回答

2

您正在创建多个div通过ID = “divToggle”。从技术上讲,你真的不应该这样做,因为不同的DOM元素具有相同的id(尽管浏览器将允许它)是无效的标记。

您可以通过使用$(这)选择当前按钮,然后就可以像这样的按钮旁边的jQuery的next()的选择来获取DIV利用:但是

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('[id*="btnToogle"]').click(function() { 
      //select the very next sibling of this button, which we know is the div 
      $(this).next().slideToggle(100); 
      return false; 
     }); 
    }); 
</script> 

请注意的是,如果开始编辑标记,使用next()可能会很危险,因为它是一个相对选择器,不是绝对的(它获取下一个元素,而不是id的特定元素)。

+0

它必须工作,但我想它找不到下一个兄弟姐妹。我也删除了ID的ID。

fooo
Kadir

+0

我想我修复它,因为我有一个按钮后
标记。无论如何,当我点击确定,但第二次点击它必须关闭,但不是。 – Kadir

+0

好的解决了。谢了哥们。 – Kadir

0

使用rptToogle_ItemBound方法&修改你的代码按下面的例子

protected void rptToogle_ItemBound(Object Sender, RepeaterItemEventArgs e) 
    { 
     try 
     { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      DataRowView drv = (DataRowView)e.Item.DataItem; 
      int year = Convert.ToInt32(drv["Year"]); 
      Panel pnl = (Panel)e.Item.FindControl("pnlToggle"); 
     // Your code 

     } 
      } 
     catch (Exception ex) 
     { 
      throw ; 
     } 
    } 


    <asp:Repeater id="rptToogle" runat="server" OnItemDataBound="rptToggle_ItemBound"> 
     <ItemTemplate> 
      <asp:Button id="btnToogle" runat="server" Text=""></asp:Button> 
       <asp:Panel ID="pnlToggle" runat="server" Visible="false"> 

       //Use Panel as this also need unique ID for your code to work properly 
       </asp:Panel> 

     </ItemTemplate> 
    </asp:Repeater> 

修改脚本,这会产生独特的按钮ID &将启动脚本特定按钮事件仅

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#<%= btnToogle.ClientID %>").click(function() { 
      $("#<%= pnlToogle.ClientID %>").slideToggle(100); 
      return false; 
     }); 
    }); 
</script> 
3

试试这个...使用$(this)而不是$('[id*="divToogle"]')里面的click

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('[id*="btnToogle"]').click(function() { 
      $(this).slideToggle(100); 
      return false; 
     }); 
    }); 
</script> 
+0

你不能点击一个隐藏的元素。 – undefined

1

您可以使用next方法:

$(document).ready(function() { 
    $('[id*="btnToogle"]').click(function() { 
     $(this).next().slideToggle(100); 
     return false; 
    }); 
}); 
+0

确切地说,id的也是独一无二的。但是在页面渲染之后,它会随着您的所知而改变。因为它在中继器。你的代码不起作用。 – Kadir

+0

@ kad1r是的,因为我建议使用类。在你的标记ID是相同的,这使得你的文档_invalid_,尝试更新的代码。 – undefined

+0

谢谢,修复它。 – Kadir

相关问题