所以,我有一个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 循环来做到这一点。帮助?
与其他答案相比,这是一种不同的方法,使用 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';
}
}
<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>