【问题标题】:Displaying or hiding multiple fields based on selection dropdown - jquery根据选择下拉显示或隐藏多个字段 - jquery
【发布时间】:2019-12-22 18:08:08
【问题描述】:

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

难道不应该有更好的办法吗?

Link 摆弄。

感谢您的意见。

## 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">   

【问题讨论】:

  • 你应该使用class,而不是id。
  • 从您的元素中删除 id showing 并将它们全部移动到具有 id showing 的容器 div 中。

标签: javascript jquery select dropdown show-hide


【解决方案1】:

**请检查HTML规则以定义输入ID和类**

元素 ID 在整个文档中应该是唯一的。

       <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();
            }
        }
    )
});

【讨论】:

    【解决方案2】:

    首先,您应该从元素中删除 id "showing" 并添加一个类名 "showing",或者您可以将此类添加到所有这些元素的父元素中。其次,您应该在 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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多