所以,我有一个JSP页面附加到我需要使用JSTL循环循环的对象列表。 (这是一个Tiles项目,控制器正在设置一些模拟对象,这些对象被添加到列表中并作为列表返回。这个位工作正常。) 基本上,我希望它连续显示一个名称,一个值和一个按钮,当单击该按钮时,我希望其余信息弹出。
<c:forEach var="i" varStatus="curr" items="${items}">
<tr>
<td>
${i.itemName}
</td>
<td>
${i.itemValue}
</td>
<td style="float:right;">
<input type="button" id="showhide">
</td>
</tr>
<tr>
<td class="toggle">
${i.itemAltName}
${i.itemAdditions}
${i.itemValueAfterAdditions}
</td>
</tr>
</c:forEach>
我使用以下JS。
<script type="text/javascript">
var buttons = document.getElementById('showhide');
buttons.onclick = function() {
var div = document.getElementsByClassName('toggle');
var x = div.length;
for(var i = 0; i < x; ++i){
if (div[i].style.display !== 'none') {
div[i].style.display = 'none';
}
else {
div[i].style.display = 'block';
}
}
};
</script>
另外,在这里陈述明显,但我的风格区域有:
.toggle{
display:none;
}
目前,只有第一个按钮才能正确打开相应的文本。从其他答案我已经看到,我知道我需要使ID唯一,但我不知道如何使用JSP循环。帮助
答案 0 :(得分:0)
与其他答案相比,采用不同的方法,使用varStatus(由Jozef Chocholacek建议)获取唯一ID。
无论按钮和链接的td在哪里(他们不必是兄弟姐妹),这都可以让你有一个解决方案。
您的JSP:
<c:forEach var="i" varStatus="curr" items="${items}" varStatus="loop">
<tr>
<td>
${i.itemName}
</td>
<td>
${i.itemValue}
</td>
<td style="float:right;">
<input type="button" class="showhide" id="showHideButton_${loop.index}">
</td>
</tr>
<tr>
<td class="toggle" id="data_${loop.index}">
${i.itemAltName}
${i.itemAdditions}
${i.itemValueAfterAdditions}
</td>
</tr>
</c:forEach>
在下面的代码段中使用JS:
var buttons = document.getElementsByClassName('showhide');
for (var i=0;i<buttons.length;i++) {
buttons[i].addEventListener("click", clickHandler);
}
function clickHandler(event) {
var buttonId = event.target.id;
var rowId = buttonId.split("_")[1];
var rowData = document.getElementById('data_' + rowId);
// do whatever you want with your row
if (rowData.style.display !== 'none') {
rowData.style.display = 'none';
} else {
rowData.style.display = 'block';
}
}
&#13;
<table>
<tr>
<td>Name</td>
<td>Value</td>
<td>Action</td>
</tr>
<tr>
<td>
Item Name 1
</td>
<td>
Item Value 1
</td>
<td style="float:right;">
<input type="button" class="showhide" id="showHideButton_98" value="Toggle">
</td>
</tr>
<tr>
<td class="toggle" id="data_98">
itemAltName1
itemAdditions1
itemValueAfterAdditions1
</td>
</tr>
<tr>
<td>
Item Name 2
</td>
<td>
Item Value 2
</td>
<td style="float:right;">
<input type="button" class="showhide" id="showHideButton_55" value="Toggle">
</td>
</tr>
<tr>
<td class="toggle" id="data_55">
itemAltName2
itemAdditions2
itemValueAfterAdditions2
</td>
</tr>
&#13;