如何在PHP foreach循环中当变量为0时隐藏指定按钮
解决方法
你的代码里有两个关键问题导致功能失效:
- 条件判断的变量名错误:
$res->issueFixedCount应该是$res->issuesFixedCount(少了一个s),或者直接使用已经定义好的$issuesFixedCount - JavaScript代码逻辑错误:
const.style.display是语法错误,应该用变量名moreInfoVar;而且document.querySelector('.moreInfo')只会选中页面中第一个匹配的元素,无法精准控制当前循环项的按钮
下面是两种可靠的解决方式:
方式一:PHP直接控制元素显示(推荐)
不需要额外JS,直接在渲染按钮时通过PHP判断是否显示,性能更优:
完全不渲染按钮(当计数为0时)
<div class="details"> <p>Issues in versie: <?= $res->issuesFixedCount; ?> </p> <p>Afgeronde issues: <?= $roundedIssue;?> </p> <p>Nog te verwerken issues: <?= $uns->issuesUnresolvedCount;?> </p> <?php if ($issuesFixedCount !== 0): ?> <a href="<?= 'version/?version=' . $item->name; ?>" class="moreInfo">Meer info</a><br> <?php endif; ?> </div>
保留元素但隐藏(当计数为0时)
如果需要保留DOM元素,只是隐藏:
<div class="details"> <p>Issues in versie: <?= $res->issuesFixedCount; ?> </p> <p>Afgeronde issues: <?= $roundedIssue;?> </p> <p>Nog te verwerken issues: <?= $uns->issuesUnresolvedCount;?> </p> <a href="<?= 'version/?version=' . $item->name; ?>" class="moreInfo" <?= $issuesFixedCount === 0 ? 'style="display:none;"' : '' ?> >Meer info</a><br> </div>
方式二:修复JavaScript逻辑(适合需要动态控制的场景)
给每个按钮添加唯一ID,确保JS能精准定位当前循环项的按钮:
<?php foreach ($items as $item): // ... 其他代码保持不变 $issuesFixedCount = $res->issuesFixedCount; // ... 其他代码保持不变 // 修正条件判断和JS逻辑 if ($issuesFixedCount === 0){ echo "<script> document.getElementById('moreInfo-{$item->name}').style.display = 'none'; </script>"; } ?> <div class="item" id="item"> <!-- ... 其他代码保持不变 --> <div class="details"> <!-- ... 其他代码保持不变 --> <!-- 给按钮添加唯一ID --> <a href="<?= 'version/?version=' . $item->name; ?>" class="moreInfo" id="moreInfo-<?= $item->name ?>" >Meer info</a><br> </div> <!-- ... 其他代码保持不变 --> </div> <?php endforeach;?>
内容的提问来源于stack exchange,提问作者JellyBean
相关产品推荐
相关产品推荐

