我有一个从数据库生成的无序列表。根据返回字段之一的值,li标签的类应设置为不同的值。不幸的是,他们都回归“不活跃”。我知道这一定很简单,但我已经盯着它好几个小时了,我只是没有看到它。
以下是代码:
<ul class="tabs">
<? foreach ($tracks AS $track) {
$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
echo "<p>".strtolower($track->shortname). " is ".$active."</p>"; ?>
<li <?= $active; ?>><a href="#<?= strtolower($track->shortname); ?>"><?= $track->name; ?></a></li>
<? } ?>
</ul>
这是实际印刷的内容:
<ul class="tabs">
<p>dpp is class="inactive"</p> <li class="inactive"><a href="#dpp">Digital Path to Purchase</a></li>
<p>cre is class="inactive"</p> <li class="inactive"><a href="#cre">Fueling Creativity</a></li>
</ul>
很明显,第一个是返回dpp的$ track-shortname,那么为什么$ active变量没有设置为“class = active”?
答案 0 :(得分:2)
您在检查短名称的表达式中输入了错误:
$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
^ ^
你当然只想把它放在$track->shortname
:
$active = (strtolower($track->shortname) === 'dpp') ? ' class="active"' : 'class="inactive"';
^ ^
否则你试图小写一个布尔值,该值为true或false,但在你的情况下,它看起来总是为false,因此是非活动的CSS类。
顺便说一句,你可以省去另外一对:$active = strtolower($track->shortname) === 'dpp' ? ' class="active"' : 'class="inactive"';
^ ^
答案 1 :(得分:1)
代码(strtolower($track->shortname === 'dpp'))
看起来不对。您将strtolower
放在比较周围,您可能只想在$track->shortname
附近。
答案 2 :(得分:1)
你的一个近括号是在错误的地方。
变化:
$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
要:
$active = (strtolower($track->shortname) === 'dpp') ? ' class="active"' : 'class="inactive"';
如果括号位于错误的位置,则会在任何小写转换之前将$track->shortname
与dpp
进行比较。然后将该比较的结果(布尔值)传递给strtolower
。这导致strtolower
只返回一个字符串表示形式,导致三元比较评估为false。