【问题标题】:Select options: jQuery, Case and show/hide form fields选择选项:jQuery、Case 和显示/隐藏表单字段
【发布时间】:2011-12-03 02:27:26
【问题描述】:

根据选择控件的值显示/隐藏表单字段的最有效方法是什么?我有一个选择控件和三个输入字段,它们会根据您工作的业务类型显示/隐藏。

<select id="business-type">
  <option value="1">Sole Trader</option>
  <option value="2">Partnership</option>
  <option value="3">Public Sector</option>
  <option value="4">Public Limited Company (Plc)</option>
  <option value="5">Charity</option>
</select>

// This should appear if you are a Sole Trader (option 1 in the select box)
<div id="soletrader">
<label for="tax">VAT Number</label>
<input type="text" name="tax" id="tax" /> 
</div>

// This should appear if you are a Public Sector business (option 3 in the select box)
<div id="publicsector">
<label for="urn">URN Number</label>
<input type="text" name="urn" id="urn" />   
</div>

// This should appear if you are a Charity (option 5 in the select box)
<div id="charity">
<label for="charityref">Charity Reference No.</label>
<input type="text" name="charity" id="charityref" />    
</div>

用 jquery 编写的 case 语句会是解决这个问题的最合适的方法吗?我该怎么写这样的声明?

默认情况下需要隐藏三个输入字段。任何帮助将不胜感激。我对 javascript/jquery 很失望。

【问题讨论】:

    标签: jquery forms select input case


    【解决方案1】:

    首先,您应该在每个字段 div 中添加“class='field'”。

    然后,使用此代码,您将在下拉列表中选择时显示/隐藏相应的字段:

    $('#business-type').change(function(){
        var selection = $('#business-type').val();
        $('.field').hide();
        switch(selection){
            case 0:
                $('#soletrader').show();
                break;
            case 1:
                $('#publicsector').show();
                break;
            case 2:
                $('#charity').show();
                break;
        }
    });
    

    【讨论】:

    • 感谢 Kostas(以及其他所有愿意回复的人)。您的回答非常有帮助,感谢 SO。
    【解决方案2】:

    几件事:

    1) 我会在每个附加字段中添加一个类(我在下面使用了 .additional-field)。这将允许您一举将它们全部隐藏,而不是要求您明确地$.hide() 每一个。只有三个还不错,但如果你最终得到更多,它会很快变得毛茸茸的。

    2) 我将代码放在一个函数中,并在页面加载时调用该函数并将其用作.change() 的参数。这节省了重复相同的代码,并涵盖了来自编辑现有值或需要更正的表单中的错误的初始值的情况。否则,在您选择其他内容并再次选择该项目之前,不会显示附加字段。

    $(document).ready(function(){
    
        function toggleBusinessTypeAdditionalFields() {
            $('.additional-field').hide();
    
            var selected = $('#business-type').val();
            switch (selected) {
                case 1:
                    $('#soletrader').show();
                    break;
                case 3:
                    $('#publicsector').show();
                    break;
                case 5:
                    $('#charity').show();
                    break;
            }
        }
        toggleBusinessTypeAdditionalFields();
        $('#business-type').change(toggleBusinessTypeAdditionalFields);
    
    });
    

    【讨论】:

      【解决方案3】:

      我认为不需要 if/switch 语句。用更多的 HTML 标记帮助你的 JavaScript。如果你在每个 div 上放置一个名为“data-val”的属性,并为它分配你希望它出现的选项的值,那么 JS 就变得非常简单了。

      因此,对于 div,您的 HTML 看起来像这样:

      <div id="soletrader" data-val="1">
          <label for="tax">VAT Number</label>
          <input type="text" name="tax" id="tax" /> 
      </div>
      

      然后你的 JS 将是:

       $('select').change(function(){
           var val = $(this).val();
           $('div').hide().filter('[data-val=' + val + ']').show();
       });
      

      【讨论】:

      • 不只适用于 html5 兼容的浏览器???而且这只会隐藏而不显示选择的内容。
      • 对不起,是要把 .show() 放在 JS 的最后一行的末尾。我已经适当地编辑了它。关于您的 HTML5 问题,不,这适用于所有浏览器。尽管数据属性在技术上是 HTML5 规范,但它仍然可以工作。事实上,您甚至不必使用 HTML5 中指定的“data-XXX”结构。您可以随意命名属性,即
        并且您仍然可以在 JS/jQuery 中访问它。我个人一直使用数据属性,通常是为了回显一个 json 编码的字符串,然后由 JS 解析。
      • @maxedison,如果我想在下拉菜单中选择option 3option 5 时显示&lt;div id="soletrader"&gt;...&lt;/div&gt;,该如何处理?
      【解决方案4】:

      把这些函数放在你的$.ready(function(){});

      $('#soletrader').hide();
      $('#publicsector').hide();
      $('#charity').hide();
      
      $('#business-type').change(function(){
         var value = $(this).val();
         if(value == '1'){
           $('#soletrader').show();
           $('#publicsector').hide();
           $('#charity').hide();
         } else if(value == '3'){
           $('#soletrader').hide();
           $('#publicsector').show();
           $('#charity').hide();
         } else if(value == '5'){
           $('#soletrader').hide();
           $('#publicsector').hide();
           $('#charity').show();
         } else {
           $('#soletrader').hide();
           $('#publicsector').hide();
           $('#charity').hide();
         }
      });
      

      【讨论】:

        【解决方案5】:
        <script type="text/javascript">
                       $('#type_of_bussiness').change(function(){
                    var selection = $('#type_of_bussiness').val();
               
                    if(selection==1)
        
                       {
                          $('#typeofmargin').css('display','block');
                       }
                       if(selection==2){
                          $('#coloxxcomm').css('display','block');
        
                       }            
                                  
                     
                 });
              </script>
        

        【讨论】:

          猜你喜欢
          相关资源
          最近更新 更多
          热门标签