Multiple Select onChange创建动态字段

时间:2016-02-22 14:19:54

标签: javascript jquery

我想在多次选择/未选中选项时尝试完成onChange事件将调用一个函数来添加或删除选中/未选中的动态字段。

我已经尝试了几个小时来思考使其发挥作用的最佳逻辑方法。



boldFont

$('.multi-select').on('change', function() {
  $.each($(this).val(), function() {
   /* [ Some logic to check if a dynamic input should be removed or added. ]*/
  });
});




我只需要一些指导,采用我应采取的最佳方法。

1 个答案:

答案 0 :(得分:1)

根据您的问题,每次用户从选择框中选择一个或多个元素时,函数必须执行以下操作:

  1. 如果选择了元素并且已经存在于div区域中:不执行任何操作
  2. 如果元素被选中但不存在于div区域中:insert
  3. 如果未选择该元素 - >从div区域中删除元素
  4. 这里的难点是按名称选择一个元素,其中name属性包含一个方括号。

    
    
    $(function () {
      $('.multi-select').on('change', function(e) {
        var cacheEle = $('.dynamic-fields');
        $(this).find('option').each(function(index, element) {
          if (element.selected) {
            if (cacheEle.find('input[name="option\\[' + element.value + '\\]"]').length == 0) {
              cacheEle.append('<input type="text" name="option[' + element.value + ']" value="' + element.text + '">')
            }
          }  else {
            cacheEle.find('input[name="option\\[' + element.value + '\\]"]').remove();
          }
        });
      });
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <select class="multi-select" multiple>
        <option value="0" selected>Col 0</option>
        <option value="1">Col 1</option>
        <option value="2" selected>Col 2</option>
    </select>
    
    <div class="dynamic-fields">
        <input type="text" name="option[0]" value="asc">
        <input type="text" name="option[2]" value="desc">
    </div>
    &#13;
    &#13;
    &#13;