【问题标题】:JavaScript, Bootstrap selectpicker, keep values on select when other changesJavaScript,Bootstrap selectpicker,在其他更改时保持选择值
【发布时间】:2019-07-30 13:46:08
【问题描述】:

当第一个选项更改时,我想保留第二个选定的选项。我制作了一个 jsfiddle 来使用它:

http://jsfiddle.net/pmiranda/yeh6b83s/40/

$(document).ready(function() {
    // I'll give and empty array, because I will assume that at first is has no data on database
    let values = [];
    if(1 /* Originally here are some js conditions*/) {
        getAL1ByCountry(values);
    } 
    $('#adm_l_1').on('change', function() {
      getAL3ByAL1(values);
    });
    $('#adm_l_1').change();
});

// This functions works with ajax but now I'm just giving some arrays of objects to make the example    
function getAL1ByCountry(value) {
  let data = {'data': [{'id': 1, 'name': 'Chile'}, {'id': 2, 'name': 'USA'}]};
  console.log(data);
  $.each(data.data, function (k, v) {
    console.log(v);
    var _selected = false;
    $.each(value, function (k2, v2) {
      if (v2.id == v.id) _selected = true;
    });

    if (_selected)
      $('#adm_l_1').append('<option value="' + v.id + '" selected>' + v.name + '</option>');
    else
      $('#adm_l_1').append('<option value="' + v.id + '">' + v.name + '</option>');
  });
  $('#adm_l_1').selectpicker('refresh');

  $('#adm_l_1').change();
}

function getAL3ByAL1(values) {
  $('#adm_l_3').empty();
  // Now I will assume that an ajax call was succes and it gives me this data:
  /*$.ajax({
                  url: '/getAL1ByCountry',
                  method: 'POST',
                  data: {
                      country   : country_id
                  }
              }).done(function (data) {
        */
  let data = {
    'data': [
      {'id': 1, 'name': 'A'},
      {'id': 2, 'name': 'B'},
      {'id': 3, 'name': 'C'},
      {'id': 4, 'name': 'D'},
      {'id': 5, 'name': 'E'},
    ]
  };
  $.each(data.data, function (k, v) {
    console.log('data', data);
    var _selected = false;
    $.each(values, function (k2, v2) {
      if (v2 == v.id) _selected = true;
    });
    if (_selected)
      $('#adm_l_3').append('<option value="' + v.id + '" selected>' + v.name + '</option>');
    else
      $('#adm_l_3').append('<option value="' + v.id + '">' + v.name + '</option>');
  });
  $('#adm_l_3').selectpicker('refresh');
}

我的第二个选择更改了第一个的值。在这个例子中不清楚,但想法是:

"如果我更改了第一个选择的值,请不要删除第二个选择的值"

这个库需要 empty() 方法,因为没有它,每次选择一个选项时它都会加载这种情况:

(如果我选 A) 一种 (如果我选 B) AAB (如果我选 C) AABABC

有什么帮助吗?

【问题讨论】:

    标签: jquery bootstrap-selectpicker


    【解决方案1】:

    好的,您的问题在于以下部分:

    $.each(values, function (k2, v2) {
        if (v2.id == v.id) _selected = true;
    }
    
    

    values 始终为空且从不提供。 因此,您可以像这样将选择的当前值保存在临时变量中:

    let saved = $('#adm_l_3').val();
    

    并重新设计您的算法以使用它而不是 values

    $.each(data.data, function (k, v) {
        var _selected = v.id == saved;
    
        if (_selected)
            /* your code */
    }
    

    http://jsfiddle.net/vksw8e9t/6/

    【讨论】:

    • 这样第二次选择的数据不会更新
    • @pmiranda 您希望能够在不更改所选值的情况下更新第二个选择数据?
    • 是的。每个“国家”都会为第二个选择添加选项。每个国家都调用 ajax,并为第二个选择带来新数据。所以我不想在每次 ajax 调用后丢失第二个选择的选定选项
    • @pmiranda 但是,如果第一个国家给你“A - B - C”选项,而第二个国家给你“D - E - F”选项呢?您在这里的预期行为是什么?
    • A,B,C,D,E,F
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多