【问题标题】:Add attribute to a html element from php if else condition如果其他条件,则从 php 向 html 元素添加属性
【发布时间】:2017-09-07 15:19:46
【问题描述】:

我有 2 个数据库表。一个用于菜单名称,另一个用于子菜单名称。有些菜单没有子菜单。我想创建一个导航菜单,它将检查菜单是否有子菜单。如果它有子菜单,它会将 data-toggle="dropdown" 添加到该菜单,以便可以在下拉框中看到子菜单。这是我的代码,我不明白为什么我的代码不工作或者我的逻辑在 HTML 中是怎样的。

function myFunction()
{
  $(".dropdown-toggle").attr("data-toggle", "dropdown");
}
    
<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark fixed-top">
        <a class="navbar-brand" href="<?php echo base_url('welcome/index')?>">
            <img src="<?php echo base_url()?>assets/images/logos/logo.png" alt="LogoFOR2401" title="LogoFOR2401">
        </a>
        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarResponsive">
            <ul class="navbar-nav ml-auto">
                <?php foreach ($navigationmenu as $navigationmenu_item): ?>
                    <li class="nav-item">
                        <a href="<?php echo base_url('welcome/menu')?>/<?php echo $navigationmenu_item['MenuID']; ?>" class="nav-link dropdown-toggle" name="<?php echo $navigationmenu_item['MenuName']; ?>" id="navbarDropdownBlog" aria-haspopup="true" aria-expanded="false"><?php echo $navigationmenu_item['MenuName']; ?></a>                      
                        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownBlog">
                            <?php foreach ($submenu as $submenu_item): ?>
                                <?php if($navigationmenu_item['MenuID'] == $submenu_item['MenuID']) {?>        
                                    echo "<script type="text/javascript">myFunction();</script>";
                                    <!--echo "function myFunction();";-->
                                    <!--echo "</script>";-->
                                    <a class="dropdown-item" href="<?php echo base_url('welcome/submenu')?>/<?php echo $submenu_item['SubMenuID']; ?>"><?php echo $submenu_item['SubMenuName']; ?></a>
                                <?php } ?>  
                            <?php endforeach; ?>
                        </div>
                    </li>
                <?php endforeach; ?>
            </ul>
        </div>
    </nav>

【问题讨论】:

  • 你为什么要注入 Javascript 来做到这一点?它应该只是一些相当简单的 PHP。并且脚本无论如何都会对具有下拉切换类的所有元素执行此操作,而不仅仅是一个。
  • 你能给我举个例子吗? @ADyson

标签: javascript php jquery html codeigniter-3


【解决方案1】:

有几个问题。

  1. 由于您使用?&gt; 退出了脚本执行模式,因此您不应使用echo。只需将 HTML 放在那里。
  2. 您的函数不会只将类添加到当前菜单,它会将类添加到 all 前面带有class="dropdown-toggle" 的元素。
  3. 您每次循环都使用id="navbarDropdownBlog"。 ID 应该是唯一的。

您应该在 PHP 中进行检查,而不是运行一个函数来添加类。

<?php foreach ($navigationmenu as $navigationmenu_item):
    $submenus = array_filter($submenu, function($submenu_item) use ($navigationmenu_item) {
        return $submenu_item['MenuID'] == $navigationmenu_item['MenuID'];
    });
    $data = empty($submenus) ? '' : 'data-toggle="dropdown"';
    ?>
    <li class="nav-item">
        <a href="<?php echo base_url('welcome/menu')?>/<?php echo $navigationmenu_item['MenuID']; ?>" class="nav-link dropdown-toggle" name="<?php echo $navigationmenu_item['MenuName']; ?>" id="navbarDropdownBlog-<?php echo $navigationmenu_item['MenuID']; ?>" aria-haspopup="true" aria-expanded="false" <?php echo $data; ?>><?php echo $navigationmenu_item['MenuName']; ?></a>                      
        <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdownBlog-<?php echo $navigationmenu_item['MenuID']; ?>">
            <?php foreach ($submenus as $submenu_item): ?>
                <a class="dropdown-item" href="<?php echo base_url('welcome/submenu')?>/<?php echo $submenu_item['SubMenuID']; ?>"><?php echo $submenu_item['SubMenuName']; ?></a>
            <?php endforeach; ?>
        </div>
    </li>
<?php endforeach; ?>

为了解决问题 3,我将菜单 ID 附加到 ID。

【讨论】:

  • 其实,它解决了我的主要问题。谢谢你的帮助。 @Barmar
猜你喜欢
  • 2019-06-29
  • 2011-12-26
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
相关资源
最近更新 更多