如何使用Javascript根据先前的下拉值显示第二个下拉列表

Posted

技术标签:

【中文标题】如何使用Javascript根据先前的下拉值显示第二个下拉列表【英文标题】:How to show a second dropdown based on previous dropdown value using Javascript 【发布时间】:2018-01-27 21:32:36 【问题描述】:

我正在尝试使用 javascript 根据第一个下拉值获取第二个下拉值。

首先,第二个下拉菜单处于隐藏模式,并通过选择第一个下拉菜单来激活,然后通过仅显示基于第一个下拉菜单选择值的数据来显示第二个值。

Depts 将 deptId 作为主键。 Bir 已将 deptId 作为外键。

我正在尝试在部门deptId == selectedItem 处获取 Bir 项目。

我怎样才能做到这一点?

这是我的看法:

<div class="row">
    <div class="col-md-6">
        <div class="form-group">
            <label for="Dept">Dept</label>
            <select class="form-control required" id="Dept" name="Dept" onchange='checkvalue(this.value)'>
                <option value="0">Dept</option>
                <?php
                if(!empty($Depts))
                
                    foreach ($Depts as $rl)
                    
                        ?>
                        <option value="<?php echo $rl->deptId ?>"><?php echo $rl->deptName?></option>
                        <?php
                    
                
                ?>
            </select>
        </div>
    </div>  
    <div class="col-md-6" >
        <div class="form-group" id="bir" style='display:none'>
            <label for="bir">Bir</label>
            <select class="form-control required" id="bir" name="bir" onchange='checkvalues(this.value)'>
                <option value="0">Pilih Bir</option>
                <?php
                if(!empty($birs))
                
                    foreach ($birs as $rl)
                    
                        ?>
                        <option value="<?php echo $rl->birId ?>"><?php echo $rl->birName ?></option>
                        <?php
                    
                
                ?>
            </select>
        </div>
    </div>  
</div>

这是我的 JavaScript:

function checkvalue(val)
 
    if(val != 0)
     
        document.getElementById('biro').style.display ='block'; 
     

【问题讨论】:

您的问题没有显示有关第二个下拉列表中的项目如何与部门 ID 相关的任何信息 更新了我的问题,希望对您有所帮助 数据在 mysql 数据库中 你检查答案了吗? 【参考方案1】:

首先,您的 html 中有一个重复的 id 值。我假设div 不应该有bir,而是biro 作为id 属性值。

然后您可以将data-dept 添加到您动态添加到第二个下拉列表的option 元素中,并为其指定deptId 的值:

foreach ($birs as $rl)

    ?>
    <option value="<?php echo $rl->birId ?>"
            data-dept="<?php echo $rl->deptId ?>" >
        <?php echo $rl->birName ?></option>
    <?php

然后在脚本中,使用dataset.dept 读出该值(确保您已在 HTML 中更正了 div 的 id 属性)。

这是一个 sn-p(没有 PHP):

function checkvalue(val)  
    if (+val)  
        for (var option of bir.options) 
            if (option.dataset.dept)  // don't touch first entry
                option.style.display = option.dataset.dept == val ? '' : 'none';
            
        
    
    bir.value = 0; // reset selection
    biro.style.display = +val ? '' : 'none'; // show/hide 


function checkvalues(val) 
<div class="col-md-6">
    <div class="form-group">
        <label for="Dept">Dept</label>
        <select class="form-control required" id="Dept" name="Dept" onchange='checkvalue(this.value)'>
            <option value="0">Dept</option>
            <option value="2">2</option>
            <option value="5">5</option>
        </select>
    </div>
</div>  
<div class="col-md-6" >
    <div class="form-group" id="biro" style='display:none'>
        <label for="bir">Bir</label>
        <select class="form-control required" id="bir" name="bir" onchange='checkvalues(this.value)'>
            <option value="0">Pilih Bir</option>
            <option value="9" data-dept="2">bir for 2</option>
            <option value="10" data-dept="5">bir for 5</option>
            <option value="8" data-dept="2">another bir for 2</option>
            <option value="15" data-dept="5">another bir for 5</option>
        </select>
    </div>
</div>  

【讨论】:

以上是关于如何使用Javascript根据先前的下拉值显示第二个下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs 根据从下拉列表中选择的值显示其他输入字段

根据 python plotly dash 中先前单选项目/下拉列表中的选择禁用下拉列表

php 根据第一个下拉选择显示第二个下拉列表(键,值)

如何在编辑页面的下拉列表中获取先前选择的值

根据下拉列表的值创建 2 个下拉列表和一个表

禁用先前选择的下拉选项,检查文本和 id 值