javascript - Javascript 上的级联下拉菜单

标签 javascript html dropdown

级联下拉菜单在第一个下拉菜单中工作正常,但无法识别第二个下拉菜单。这里缺少一些小东西。我尝试了几个选项,但 javascript 没有附加到第二次调用。有没有办法动态添加它?

<label class="page1">Country</label>
<div class="tooltips" title="Please select the country that the customer will primarily be served from">
    <select id="country" name="country" placeholder="Phantasyland">
        <option></option>
        <option>Germany</option>
        <option>Spain</option>
        <option>Hungary</option>
        <option>USA</option>
        <option>Mexico</option>
        <option>South Africa</option>
        <option>China</option>
        <option>Russia</option>
    </select>
</div>

<br />
<br />

<label class="page1">Location</label>
<div class="tooltips" title="Please select the city that the customer is     primarily to be served from.">
    <select id="location" name="location" placeholder="Anycity"></select>
</div>

<label class="page1">Country</label>
<div class="tooltips" title="Please select the country that the customer will primarily be served from">
    <select id="country" name="country" placeholder="Phantasyland">
        <option></option>
        <option>Germany</option>
        <option>Spain</option>
        <option>Hungary</option>
        <option>USA</option>
        <option>Mexico</option>
        <option>South Africa</option>
        <option>China</option>
        <option>Russia</option>
    </select>
</div>

<br />
<br />

<label class="page1">Location</label>
<div class="tooltips" title="Please select the city that the customer is primarily to be served from.">
    <select id="location" name="location" placeholder="Anycity"></select>
</div>

Javascript:

jQuery(function($) {
    var locations = {
        'Germany': ['Duesseldorf', 'Leinfelden-Echterdingen', 'Eschborn'],
        'Spain': ['Barcelona'],
        'Hungary': ['Pecs'],
        'USA': ['Downers Grove'],
        'Mexico': ['Puebla'],
        'South Africa': ['Midrand'],
        'China': ['Beijing'],
        'Russia': ['St. Petersburg'],
    }

    var $locations = $('#location');
    $('#country').change(function () {
        var country = $(this).val(), lcns = locations[country] || [];

        var html = $.map(lcns, function(lcn) {
            return '<option value="' + lcn + '">' + lcn + '</option>'
        }).join('');

        $locations.html(html)
    });
});

最佳答案

问题是您在 HTML 元素上使用了重复的 ID。 HTML 文档中多个元素具有相同的 ID 是无效的。您还需要更改名称属性,否则您的表单将仅包含最后一个元素的值。

您可以将类添加到顶级类别选择元素

<select id="country1" class="country" name="country1" placeholder="Phantasyland">
 ...
</select>

<select id="country2" class="country" name="country2" placeholder="Phantasyland">
 ...
</select>

然后,您可以向子类别添加链接到父选择元素的属性

<select data-parent="country1" name="location1" placeholder="Anycity"></select>
<select data-parent="country2" name="location2" placeholder="Anycity"></select>

然后将处理程序绑定(bind)到country

$('.country').change(function () {
    var id = $(this).attr('id');
    var $locations = $('[data-parent=' + id + ']');

    var country = $(this).val(), lcns = locations[country] || [];

    var html = $.map(lcns, function(lcn) {
        return '<option value="' + lcn + '">' + lcn + '</option>'
    }).join('');

    $locations.html(html)
});

关于javascript - Javascript 上的级联下拉菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834906/

相关文章:

javascript - float 在其他响应式 div 上的 div

html - 在父元素下方居中滚动菜单

java - Wicket DropDownChoice 所选值

css - Z 索引不适用于位于披露面板一侧的下拉组件。

javascript - 不可变的 .toArray() 不会渲染数据 - ReactJS

javascript - d3.js 选择条件渲染

javascript - 在 Chrome 上加载网站之前运行 JavaScript 片段

javascript - Unlayer EmailEditor 导入 React 会破坏应用程序

javascript - 使用 jQuery 从一个位置复制文本,以替换其他位置的文本

html - 重复主体背景图像下方的空白