【问题标题】:How to populate a selectbox depending on another selectbox using PHP JSON ARRAY如何使用 PHP JSON ARRAY 根据另一个选择框填充选择框
【发布时间】:2017-07-22 15:03:25
【问题描述】:

我正在尝试填充依赖于另一个选择框的选择框

<select>
    <option value="a">a</option>
    <option value="b">b</option>
</select>



<select>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
</select>

例如,我想当用户选择 select1 (a) 时,Select2 显示 1、2 和 3 当他选择B时,它显示4,5,6等等。

选择框值是一个 PHP ARRAY 对象,我尝试使用 jQuery 使用 $.each 填充它,但由于数组类似于:

{ "Option 1":[ {"name" : "test", "age" : "1"}, .... ] }

提前致谢。

【问题讨论】:

  • 您必须基于选择框 1 创建动态选项元素,并将这些元素附加到选择框 2 中。您能否分享您的完整解决方案。
  • jQuery 可以帮助你。这是一个工作 examplejsfiddle
  • 没有回答对您有帮助吗?

标签: javascript php jquery html arrays


【解决方案1】:

例如你有以下 json:

{
    "Apple": {
        "iphone SE": "https://www.apple.com/iphone-se/",
        "iphone 7": "https://www.apple.com/iphone-7/"
    },
    "samsung": {
        "galaxy s8": "http://www.samsung.com/us/explore/galaxy-s8/",
        "galaxy s7": "http://www.samsung.com/us/explore/galaxy-s7/"
    }
}

为此我们必须使用javascript,使用jQuery(一个javascript库)很好。看看下面的例子:

$(function() {
    var selectValues = {
        "apple": {
            "iphone SE": "https://www.apple.com/iphone-se/",
            "iphone 7": "https://www.apple.com/iphone-7/"
        },
        "samsung": {
            "galaxy s8": "http://www.samsung.com/us/explore/galaxy-s8/",
            "galaxy s7": "http://www.samsung.com/us/explore/galaxy-s7/"
        }
    };

    var $vendor = $('select.mobile-vendor');
    var $model = $('select.model');
    $vendor.change(function() {
        $model.empty().append(function() {
            var output = '';
            $.each(selectValues[$vendor.val()], function(key, value) {
                output += '<option>' + key + '</option>';
            });
            return output;
        });
    }).change();

    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>  
    <select class="mobile-vendor">
    <option value="apple">Apple</option>
    <option value="samsung">Samsung</option>
  </select>

<select class="model">
    <option></option>
</select>
</p>

【讨论】:

    【解决方案2】:

    这是一个如何使用 jquery 实现更改的示例。

    请多发布/解释您的对象格式,我将创建一个循环来正确解析它。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <title>Bootstrap Example</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
    
    <select id="letter">
        <option value="a">a</option>
        <option value="b">b</option>
    </select>
    
    <select id="age">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
    </select>
      <script>
      $("#letter").change(function(){
        if($("#letter").val() === "a"){
          $("#age")
            .empty()
            .append('<option selected="selected" value="1">1</option>')
          ;
        }else{
          $("#age")
            .empty()
            .append('<option selected="selected" value="5">5</option>')
          ;
        }
      });
      </script>
    </body>
    </html>

    【讨论】:

      【解决方案3】:
      // you can try something like this.
      
      var s1 = document.getElementById("s1");
      var s2 = document.getElementById("s2");
      
      var s1Value = s1.value;
      
      var i;
      var frag = document.createDocumentFragment();
      var ele;
      if(s1Value == 'a'){
          for(i=0;i<3;i++){
              ele = document.createElement('option');
              ele.value = i + 1;
              ele.innerHTML = i + 1;
              frag.appendChild(ele);
          }
      }
      s2.innerHTML = ''
      s2.appendChild(frag);
      

      【讨论】:

        【解决方案4】:

        感谢大家的帮助,但是,我采用了另一种方法。也就是将select中的整个PHP数组作为选项输出,并将它们全部隐藏,当select1中的选项被选中时,我使用jQuery只显示具有特定属性的项目:

        <script>
        $(".select2").prop("disabled", true);
        $(".select1").change(function() {
        $('.select2').prop('disabled', false);
        $(".select2 option").hide();
        var currentVal = $('.select1 :selected').attr('optionis'),
        ValueSelected = $(".select2 option[optionvalue*='" + currentVal + "']");
        ValueSelected.show();
        $(ValueSelected).first().prop("selected", true); 
        });
        </script>
        <select class="select1">
          <option value="1" optionis="1">Option 1</option>
          <option value="2" optionis="2">Option 2</option>
        </select>
        <select class="select2">
          <option value="1" optionvalue="1">Value 1</option>
          <option value="2" optionvalue="1">Value 2</option>
          <option value="1" optionvalue="2">Value 3</option>
          <option value="1" optionvalue="2">Value 4</option>
          <option value="1" optionvalue="2">Value 5</option>
        </select>
        

        CODEPEN

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-17
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 2012-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多