【问题标题】:how get value on selectbox add dynamic如何在选择框上获取值添加动态
【发布时间】:2019-01-19 18:24:23
【问题描述】:

我正在尝试使一个动态选择框依赖于另一个,但是我想动态添加几个并选择各个值以便能够选择另一个。我尝试使用更改来做到这一点,但它只需要第一个选择,我想获取所选选择的值并设置另一个选择。谢谢你的帮助

$(function() {
  var listaPecas = [{
      "Tipo_PecaID": 1,
      "Descricao": "impressora"
    },
    {
      "Tipo_PecaID": 2,
      "Descricao": "teclado"
    },
    {
      "Tipo_PecaID": 3,
      "Descricao": "notebook"
    },
  ];
  var listaModelos = [{
      "id_peca_modelo": 1,
      "Tipo_PecaID": "1",
      "ds_descricao": "epson"
    },
    {
      "id_peca_modelo": 2,
      "Tipo_PecaID": "2",
      "ds_descricao": "asus"
    },
    {
      "id_peca_modelo": 3,
      "Tipo_PecaID": "3",
      "ds_descricao": "microsoft"
    },
  ];


  $(document).on('change', '.peca', function(e) {
    e.preventDefault();
    $('.selectpicker.form-control.peca').each(function() {
      id = $(this).val();
      $.each(listaModelos, function(indexInArray, modelo) {
        option = "";
        if (id == modelo.Tipo_PecaID) {
          option = '<option value="' + modelo.id_peca_modelo + '">' + modelo.ds_descricao + '</option>'
        }
      });

      $('.selectpicker.form-control.model').append(option);
      $('.selectpicker.form-control.model').selectpicker('refresh');
    });
  })
});

function adicionarPeca(listaPecas) {
  div = '<div class="row seletor-select">';
  div += '<div class="col-md-3">';
  div += '<select class="selectpicker form-control peca" name="peca" data-live-search="true">';
  $.each(listaPecas, function(indexInArray, peca) {
    div += '<option value="' + peca.Tipo_PecaID + '">' + peca.Descricao + '</option>'
  });
  div += '</select>';
  div += '</div>';
  div += '<div class="col-md-3">';
  div += '<select class="selectpicker form-control model" name="model" data-live-search="true">';
  div += '</select>';
  div += '</div>';
  div += '<div class="col-md-2">';
  div += '<div class="form-group">';
  div += '<input type="text" name="porta" class="form-control" value="">';
  div += '</div>';
  div += '</div>';
  div += '<div class="col-md-1">';
  div += '<div class="form-group">';
  div += '<button type="button" class="btn btn-danger RemoveLinha">-</button>';
  div += '</div>';
  div += '</div>';
  $("#lista.row").append(div);
  div += '</div>';
  $("#lista").append(div);

  $('.selectpicker').selectpicker();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="lista"></div>

【问题讨论】:

  • 你永远不会打电话给adicionarPeca()

标签: javascript jquery bootstrap-selectpicker


【解决方案1】:

您每次都在通过 $.each 循环重置 option = ""。除非所选选项与 listaModelos 中的最后一个元素匹配,否则您将无法获得所需的 &lt;option&gt; 值。

您应该在循环之前初始化变量。此外,您应该在找到所选选项时终止循环,因为继续搜索它没有意义。您可以通过从回调函数返回false 来终止$.each 循环。

  var option = "";
  $.each(listaModelos, function(indexInArray, modelo) {
    if (id == modelo.Tipo_PecaID) {
      option = '<option value="' + modelo.id_peca_modelo + '">' + modelo.ds_descricao + '</option>';
      return false;
    }
  });

下一个问题是这段代码:

  $('.selectpicker.form-control.model').append(option);
  $('.selectpicker.form-control.model').selectpicker('refresh');

这会将选项附加到所有.model 选择器,而不仅仅是当前.peca 之后的那个。将其更改为:

$(this).closest(".row").find(".selectpicker.form-control.model")
    .append(option)
    .selectpicker('refresh');

您还需要在change 事件处理程序中使用e.stopPropagation()。 bootstrap-select 插件将peca 类从&lt;select&gt; 复制到它添加的&lt;div&gt; 包装器,因此事件会冒泡到DIV,但$(this).val() 在那里不起作用。

Working fiddle

【讨论】:

  • 感谢您的帮助,但我仍然没有得到它,我是否可以选择插入更多选择,它不会仅将第一个箭头指向其他选择。效仿link
  • 我已经更新了答案并将我的更改添加到您的小提琴中。
  • 非常感谢您的帮助,这些修改选择正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-14
  • 2018-05-02
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多