Reputation: 321
I have two divs that sit inside a repeater. Basically the div's class names gets set based on what ever my code behind functions return. However, I want to be able reference these divs within my javascript which i'm unsure on how to do.
<asp:Repeater ID="rptdivisions" runat="server">
<ItemTemplate>
<div class='<%# getDivHeaderClass(Eval("Division").ToString())%>'>
<%# Eval("Division")%>
</div>
<div class='<%# getDivMainClass(Eval("Division").ToString())%>'>
<br />
<dx:ASPxGridView ID="gvrecords" runat="server" ClientInstanceName="gvCentral" AutoGenerateColumns="False" OnHtmlDataCellPrepared="gvrecords_HtmlDataCellPrepared">
<Columns>
<dx:GridViewDataTextColumn Caption="Product Code " VisibleIndex="0" FieldName="code"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Description" VisibleIndex="1" FieldName="description"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Packsize" VisibleIndex="2" FieldName="packSize"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Barcode" VisibleIndex="3" FieldName="barcodeUnit"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Expiry Date" VisibleIndex="4" FieldName="ExpiryDate"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Quantity" VisibleIndex="5" FieldName="packQuantity"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Zone ID" VisibleIndex="6" FieldName="ZoneID"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Location ID" VisibleIndex="7" FieldName="LocationID"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Date Recorded" VisibleIndex="8" FieldName="DateRecorded"></dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="Average WK Sales" VisibleIndex="9" FieldName="AverageWkSales"></dx:GridViewDataTextColumn>
</Columns>
<ClientSideEvents EndCallback="function(s, e){Dcs.load()}" />
<SettingsText Title="Central" />
</dx:ASPxGridView>
</div>
<br />
</ItemTemplate>
</asp:Repeater>
Javascript is:
$(function () {
$(document).on('click', '.headerdiv', function () {
$(".maindiv").toggle("slow");
});
});
Upvotes: 0
Views: 179
Reputation: 5213
Add an additional class to the div and reference that.
Here is a sample: (the spaces after the class name is important)
<div class='<%# "header_class " + getDivHeaderClass(Eval("Division").ToString())%>'>
<%# Eval("Division")%>
</div>
<div class='<%# "main_class " + getDivMainClass(Eval("Division").ToString())%>'>
Then in your js:
$(function () {
$(document).on('click', '.header_class', function () {
$(this).siblings('.main_class').toggle('slow');
});
});
EDIT:
As the OP commented, this only works if each item in the template is surrounded by a div. If you do not have a div wrapping each item, the following code will work for you:
$(function () {
$(document).on('click', '.header_class', function () {
$(this).nextAll('.main_class').first().toggle('slow');
});
});
Note: I used $(this).nextAll('.main_class').first().toggle('slow');
as it would be more reliable to the general user. If your divs are always beside each other and no elements in between, you could simply use $(this).next().toggle('slow');
. If you use the shorter version and end up changing your layout later, it will break.
Upvotes: 1
Reputation: 2007
You need to invoke your function
$(function () {
$(document).on('click', '.headerdiv', function () {
$(".maindiv").toggle("slow");
});
})();
Upvotes: 0