根据另一个下拉列表中的选择填充一个下拉列表

IT技术 javascript html
2021-01-27 22:56:12

我需要使用 javascript 根据下拉列表 A 中的选择更改下拉列表 B 的内容。不涉及数据库查询——我事先知道应该在 A 中选择 B 的内容。我找到了一些使用 AJAX 的示例,但由于不涉及数据库查询,因此没有必要。任何人都可以指点我一些示例代码如何做到这一点?

3个回答

function configureDropDownLists(ddl1, ddl2) {
  var colours = ['Black', 'White', 'Blue'];
  var shapes = ['Square', 'Circle', 'Triangle'];
  var names = ['John', 'David', 'Sarah'];

  switch (ddl1.value) {
    case 'Colours':
      ddl2.options.length = 0;
      for (i = 0; i < colours.length; i++) {
        createOption(ddl2, colours[i], colours[i]);
      }
      break;
    case 'Shapes':
      ddl2.options.length = 0;
      for (i = 0; i < shapes.length; i++) {
        createOption(ddl2, shapes[i], shapes[i]);
      }
      break;
    case 'Names':
      ddl2.options.length = 0;
      for (i = 0; i < names.length; i++) {
        createOption(ddl2, names[i], names[i]);
      }
      break;
    default:
      ddl2.options.length = 0;
      break;
  }

}

function createOption(ddl, text, value) {
  var opt = document.createElement('option');
  opt.value = value;
  opt.text = text;
  ddl.options.add(opt);
}
<select id="ddl" onchange="configureDropDownLists(this,document.getElementById('ddl2'))">
  <option value=""></option>
  <option value="Colours">Colours</option>
  <option value="Shapes">Shapes</option>
  <option value="Names">Names</option>
</select>

<select id="ddl2">
</select>

这可能晚了,但我正在为我的下拉列表寻找代码片段,你提供了一个很好的工作示例。谢谢!+1
2021-03-11 22:56:12
@bot - 该问题已onLoad被选中,该功能应绑定到其他地方,例如no wrap - in <head>同样出于某种原因,我最初编写它是为了在每次需要访问 ddl 时遍历 DOM 树,这似乎很浪费。所以我更新了它以传递元素引用,而不是 ID。请参阅:jsfiddle.net/e6hzj8gx/4
2021-03-16 22:56:12
有史以来最有效的方式。此外,可以对 <option value='value'>Description</option> 使用二维数组。
2021-03-28 22:56:12
我需要做同样的事情,但是应该从数据库中获取选项的值,我该怎么做?
2021-03-30 22:56:12
当我看到var colours = new Array('Black', 'White', 'Blue');Simply var colours = ['Black', 'White', 'Blue'];is all you need时,我总是不寒而栗
2021-04-09 22:56:12

在闭包中使用直接的 JavaScript 设置我的,注释中提供了解释

(function() {

  //setup an object fully of arrays
  //alternativly it could be something like
  //{"yes":[{value:sweet, text:Sweet}.....]}
  //so you could set the label of the option tag something different than the name
  var bOptions = {
    "yes": ["sweet", "wohoo", "yay"],
    "no": ["you suck!", "common son"]
  };

  var A = document.getElementById('A');
  var B = document.getElementById('B');

  //on change is a good event for this because you are guarenteed the value is different
  A.onchange = function() {
    //clear out B
    B.length = 0;
    //get the selected value from A
    var _val = this.options[this.selectedIndex].value;
    //loop through bOption at the selected value
    for (var i in bOptions[_val]) {
      //create option tag
      var op = document.createElement('option');
      //set its value
      op.value = bOptions[_val][i];
      //set the display label
      op.text = bOptions[_val][i];
      //append it to B
      B.appendChild(op);
    }
  };
  //fire this to update B on load
  A.onchange();

})();
<select id='A' name='A'>
  <option value='yes' selected='selected'>yes
  <option value='no'> no
</select>
<select id='B' name='B'>
</select>

你能不能看看:http : //jsfiddle.net/4Zw3M/1/

基本上,数据存储在一个数组中,并相应地添加选项。我认为代码说了一千多个字。

var data = [ // The data
    ['ten', [
        'eleven','twelve'
    ]],
    ['twenty', [
        'twentyone', 'twentytwo'
    ]]
];

$a = $('#a'); // The dropdowns
$b = $('#b');

for(var i = 0; i < data.length; i++) {
    var first = data[i][0];
    $a.append($("<option>"). // Add options
       attr("value",first).
       data("sel", i).
       text(first));
}

$a.change(function() {
    var index = $(this).children('option:selected').data('sel');
    var second = data[index][1]; // The second-choice data

    $b.html(''); // Clear existing options in second dropdown

    for(var j = 0; j < second.length; j++) {
        $b.append($("<option>"). // Add options
           attr("value",second[j]).
           data("sel", j).
           text(second[j]));
    }
}).change(); // Trigger once to add options at load of first choice