jQuery:选择与另一个下拉列表相关的下拉列表

时间:2018-09-22 20:26:01

标签: javascript php jquery html ajax

已更新 我有2个下拉菜单(输入选择)-一个用于国家(#label-country ),另一个-用于州(#label-state )。 用户选择国家/地区后,状态列表就会更改。 一旦选择了国家,以下代码将更改州列表:

$('#label-country').change(function() {
    var countryinput = $('#label-country').val();
    $.post('func/region.php', {countryinput:countryinput}, function(states) { 
        $('#label-state option').remove();
        $('#label-state').append(states);
    });
});

如果用户手动选择国家/地区,然后为该国家/地区声明状态,则效果很好。 但是在某些情况下,我希望能够预先选择国家和州。

我发现以下代码不起作用-根据需要选择了国家/地区,但指定了状态-

$('#label-country').val('US').trigger('change');
$('#label-state').val('Alaska');

我想到的流程:

  1. 使用以下行选择美国
  

$('#label-country')。val('US')

  1. 触发更改功能
  

.trigger('change')

  1. 使用
  2. 选择“阿拉斯加”状态
  

$('#label-country')。val('阿拉斯加')

最后我有:

  1. 国家被选中

  2. 状态列表已更改

  3. 未选择状态

我在变更功能和状态选择的顺序中缺少某些东西吗?

1 个答案:

答案 0 :(得分:0)

$('#label-country').val('US').trigger('change');触发一个事件,该事件具有异步ajax发布功能,这正是导致问题的确切原因。

直到ajax .done()函数被触发,您的下一行$('#label-state').val('Alaska');已经被调用,到发生时,您的$('#label-state')还没有值,以证明这样,您可以使用for循环记录其值。

因此,在这种情况下,您需要做的只是放置

if(countryInput=="US") $('#label-state').val('Alaska');放在$.post函数中,然后删除$('#label-country').val('US').trigger('change');