根据选择下拉列表显示或隐藏多个字段 - jquery

Displaying or hiding multiple fields based on selection dropdown - jquery

我有一个包含下拉列表的表单。根据下拉列表中的 selection,应显示或隐藏多个字段。 我编写的 jquery 函数仅适用于一个字段。如果我 select 没有在下拉列表中只有隐藏的标题,其余的保留。 我不太明白为什么。 我可以通过给每个字段 id 另一个名称(例如 showing1、showing2、...)并在函数中引用这个 id 来解决这个问题,但这是很多重复。

难道没有更好的方法吗?

Link 到 fiddle.

感谢您的输入。

## jQuery

$(document).ready(function(){
    $('#showing').hide();
    $('#condition').change(
        function(){
            if(this.value == "yes"){
                $('#showing').show();
            }
            else {
                $('#showing').hide();
            }
        }
    )
});

### Part of the form
    <div class="col-4"> 
                    <div class="d-flex">                    
                        <div class="flex-fill p-2">
                        <select name="playing" class="form-control" id="condition" required>
                                <option value="yes">Yes</option>
                                <option value="no">No</option>
                            </select>
                        </div>
                    </div> 
                </div>
            </div> 
            <div class="row">
                <div class="col-2">
                    <div class="d-flex">
                        <div class="p-1">
                            <label class="p-2" for="what" id="showing" >What</label>
                        </div> 
                    </div>
                </div> 
                <div class="col-4"> 
                    <div class="d-flex">                       
                        <div class="flex-fill p-2">
                            <input  id="showing"
                                    type="text" 
                                    class="form-control input-text" 
                                    name="wat" 
                            >
                        </div>
                    </div> 
                </div>
                <div class="col-2">
                    <div class="d-flex">
                        <div class="p-1">
                        <label class="p-2" for="type" id="showing" >Type</label>
                        </div>
                    </div>
                </div>
                <div class="col-4"> 
                    <div class="d-flex">   

**请检查 HTML 定义输入 ID 的规则和 class **

Element IDs should be unique within the entire document.

       <div>
      <img src="https://playcode.io/static/img/logo.png" 
        alt="PlayCode logo">
        <h1 id="msg"></h1>
       <div class="col-4"> 
                    <div class="d-flex">                    
                        <div class="flex-fill p-2">
                        <select name="playing" class="form-control" id="condition" required>
                                <option value="yes">Yes</option>
                                <option value="no">No</option>
                            </select>
                        </div>
                    </div> 
                </div>
            </div> 

   <div class="row">
               <div class="what_hide">
                <div class="col-2">
                    <div class="d-flex">
                        <div class="p-1">
                            <label class="p-2" for="what" id="showing" >What</label>
                        </div> 
                    </div>
                </div> 
                <div class="col-4"> 
                    <div class="d-flex">                       
                        <div class="flex-fill p-2">
                            <input  id="wat"
                                    type="text" 
                                    class="form-control input-text" 
                                    name="wat" 
                            >
                        </div>
                    </div> 
                </div>
                </div>
                <div class="col-2">
                    <div class="d-flex">
                        <div class="p-1">
                        <label class="p-2" for="type"  >Type</label>
                        </div>
                    </div>
                </div>
                <div class="col-4"> 
                    <div class="d-flex">   
                        <div class="flex-fill p-2">
                            <input  id="new"
                                    type="text" 
                                    class="form-control input-text" 
                                    name="type" 
                            >
                        </div>
                    </div> 
                </div>     
            </div>

JS

$(document).ready(function(){
    $('.what_hide').hide();
    $('#condition').change(
        function(){
            if(this.value == "yes"){
                $('.what_hide').show();
            }
            else {
                $('.what_hide').hide();
            }
        }
    )
});

首先,您应该从元素中删除 id "showing" 并添加一个 class 名称 "showing" 或者您可以将此 class 添加到所有这些元素的父元素.其次,你应该在 jquery 中将你的 id 更改为 class。而且我认为您没有添加加载 jquery.

的脚本

编辑后的代码:

 $(document).ready(function(){
        $('.showing').hide();
        $('#condition').change(
            function(){
                if(this.value == "yes"){
                    $('.showing').show();
                }
                else {
                    $('.showing').hide();
                }
            }
        )
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-4"> 
                        <div class="d-flex">                    
                            <div class="flex-fill p-2">
                            <select name="playing" class="form-control" id="condition" required>
                                    <option value="no">No</option>
                                    <option value="yes">Yes</option>
                                </select>
                            </div>
                        </div> 
                    </div>
                
 <div class="row">
                    <div class="col-2">
                        <div class="d-flex">
                            <div class="p-1">
                                <label class="p-2 showing" for="what">What</label>
                            </div> 
                        </div>
                    </div> 
                    <div class="col-4"> 
                        <div class="d-flex">                       
                            <div class="flex-fill p-2">
                                <input
                                        type="text" 
                                        class="form-control input-text showing" 
                                        name="wat" 
                                >
                            </div>
                        </div> 
                    </div>
                    <div class="col-2">
                        <div class="d-flex">
                            <div class="p-1">
                            <label class="p-2 showing" for="type">Type</label>
                            </div>
                        </div>
                    </div>
                    <div class="col-4"> 
                        <div class="d-flex">   
                            <div class="flex-fill p-2">
                                <input
                                        type="text" 
                                        class="form-control input-text showing" 
                                        name="type" 
                                >
                            </div>
                        </div> 
                    </div>     
                </div>