我正在使用转发器在我的页面上显示数据,我想使用jquery切换来显示/隐藏地址字段,以使页面更加用户友好。
这是转发器
<asp:Repeater ID="RepeaterPersonBasicData" runat="server">
<ItemTemplate>
<div id="Maindetails" class="dataContentSection" runat="server">
<div id="Div1" visible="true" runat="server">
<span id="Span1" class="dataFieldText" runat="server">Name:</span>
<span id="Span1444" runat="server"><%# Eval("Name")%></span>
</div>
<div id="Div2" visible="true" runat="server">
<span id="Span3" class="dataFieldText" runat="server">DOB:</span>
<span id="Span1443" runat="server"><%# Eval("DOB")%></span>
</div>
<div id="Div3" visible="true" runat="server">
<span id="Span5" class="dataFieldText" runat="server">Age:</span>
<span id="Span1442" runat="server"><%# Eval("Age")%></span>
</div>
</div>
<a href="javascript:void(0);" id="toggleAddressdetails" class="titleText" runat="server">+ Address details</a>
<div id="Addressdetails" class="dataContentSection" runat="server" style="display: none;">
<div id="Div78" visible="true" runat="server">
<span id="Span144" class="dataFieldText" runat="server">Address Line 1:</span>
<span id="Span246" runat="server"><%# Eval("Address1")%></span>
</div>
<div id="Div80" visible="true" runat="server">
<span id="Span148" class="dataFieldText" runat="server">>Address Line 2:</span>
<span id="Span147" runat="server"><%# Eval("Address2")%></span>
</div>
<div id="Div82" visible="true" runat="server">
<span id="Span152" class="dataFieldText" runat="server">>Address Line 3:</span>
<span id="Span151" runat="server"><%# Eval("Address3")%></span>
</div>
<div id="Div84" visible="true" runat="server">
<span id="Span156" class="dataFieldText" runat="server">>Address Line 4:</span>
<span id="Span155" runat="server"><%# Eval("Address4")%></span>
</div>
</div>
<br />
</ItemTemplate>
</asp:Repeater>
基本上我想要包含这样的一些javascript,以便可以为每个转发器项启用切换。我尝试使用.ClientID,但这在转发器中不起作用。 只是为了证明它可行,我尝试了包含javascript,它确实有效,但显然只适用于前五个中继器项目。
<script type="text/javascript">
$(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl00_toggleAddressdetails').click(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl00_Addressdetails').toggle();
});
});
$(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl01_toggleAddressdetails').click(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl01_Addressdetails').toggle();
});
});
$(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl02_toggleAddressdetails').click(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl02_Addressdetails').toggle();
});
});
$(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl03_toggleAddressdetails').click(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl03_Addressdetails').toggle();
});
});
$(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl04_toggleAddressdetails').click(function () {
$('#ctl00_cphBody_ctl00_ctl00_RepeaterPersonBasicData_ctl04_Addressdetails').toggle();
});
});
</script>
我当然愿意采用不同的方法来实现在转发器内部使用可折叠内容的相同目标。
答案 0 :(得分:3)
最简单的方法是不使用ID,而是使用类名作为选择器。例如,这里有一些基于您的代码的HTML:
<div id="repeater">
<!-- item 1 -->
<div class="dataContentSection">
<div>Name</div>
</div>
<a href="javascript:void(0);" class="titleText toggler">+ Address details</a>
<div class="dataContentSection" style="display: none;">
<div>Address Line 1:</div>
<div>Address Line 2:</div>
<div>Address Line 3:</div>
</div>
<!-- item 2 -->
<div class="dataContentSection">
<div>Name</div>
</div>
<a href="javascript:void(0);" class="titleText toggler">+ Address details</a>
<div class="dataContentSection" style="display: none;">
<div>Address Line 1:</div>
<div>Address Line 2:</div>
<div>Address Line 3:</div>
</div>
<!-- etc -->
</div>
注意我为了简单起见删除了ID。我还将类名'toggler'添加到锚标签。
然后将此用于您的脚本:
<script type="text/javascript">
$(function() {
$('a.toggler').on('click', function() {
$('+ div', this).toggle();
});
});
</script>
执行此脚本时,它会将事件处理程序绑定到类名为“toggler”的所有锚元素。事件处理程序在执行时,只是在单个元素的DIV兄弟上调用jQuery toggle()方法。
这是一个完整的JS小提琴:http://jsfiddle.net/P5tZX/
答案 1 :(得分:1)
快速的方法可能是使用类而不是id选择器。这应该是一个起点:
$(function () {
$('a.titleText').on('click', function (ev) {
$(this).next('div').toggle();
});
});
然后我会优化事件监听器以使用delegation,而不是为每个链接创建一个事件。
答案 2 :(得分:0)
我认为,此代码对您有所帮助。它隐藏了所有“.dataContentSection”项,然后只在目标itemTemplate中打开“.dataContentSection”元素。
$(function () {
$('a.titleText').on('click', function (ev) {
$(".dataContentSection").each(function(){
$(this.hide();
});
$(this).next('div').toggle();
});
});