2017-08-13 198 views
0

我有一个选择字段,用户可以在其中选择&我正在使用Select2进行多项选择。Select2:如何在Select2中获得自定义排序

<select id="currency" name="currency_cc"> 
    <option value="BDT">BDT - Bangladesh</option> 
    <option value="USD">USD - USA</option> 
    <option value="ZWL">ZWL - Zimbabwe</option> 
</select> 

但问题是,如果我从列表中选择&选项2,然后选择选项1,然后 地选择2选项2选项前1 VAL,但我选择的选项2首。

我希望选项1放在选项2之后,因为我按照此顺序选择,我该怎么做?我认为官方文件没有任何内容。

但我看到了一个JS小提琴这个工作,我从以下是问答获得/ A页: jQuery select2 control - retrieve last selected element

和小提琴是: http://jsfiddle.net/jEADR/1588/

检查,还有就是它的工作原理是我想要的,但它在我的代码中并不像这样。

有人请帮忙。

+0

它也除去被选择的元素,这不是我希望的方式,这就是为什么我不认为。 – APu

回答

0

我设法使其与下面的代码工作,(我收集它从别的地方&不再可以从那里记得)

var $select2 = $('#currency-converter-currencies').select2({ 
      templateSelection: template, 
      width: '100%' 
     }).val({!! $setting->convert_currencies !!}).trigger('change'); 

    // cache order of initial values 
    var defaults = $select2.select2('data'); 
    defaults.forEach(function (obj) { 
     var order = $select2.data('preserved-order') || []; 
     order[order.length] = obj.text; 
     $select2.data('preserved-order', order); 
    }); 

    function select2_renderSelections($select2) { 
     var order = $select2.data('preserved-order') || []; 
     var $container = $select2.next('.select2-container'); 
     var $tags = $container.find('li.select2-selection__choice'); 
     var $input = $tags.last().next(); 

     // apply tag order 
     order.forEach(function (val) { 
      var $el = $tags.filter(function (i, tag) { 
       return $(tag).data('data').id === val; 
      }); 
      $input.before($el); 
     }); 
    } 

    function selectionHandler(e) { 
     var $select2 = $(this); 
     var val = e.params.data.id; 
     var order = $select2.data('preserved-order') || []; 

     switch (e.type) { 
      case 'select2:select': 
       order[order.length] = val; 
       break; 
      case 'select2:unselect': 
       var found_index = order.indexOf(val); 
       if (found_index >= 0) order.splice(found_index, 1); 
       break; 
     } 
     $select2.data('preserved-order', order); // store it for later 
     select2_renderSelections($select2); 
    } 

    $select2.on('select2:select select2:unselect', selectionHandler); 



    /** 
    * Put select option's value instead on text in select box 
    * @param data 
    * @param container 
    */ 
    function template(data, container) { 
     return data.id; 
    } 

在这里,我们用我们的过滤值替换原来的选择二值“模板“功能。

这不应该是永久性修复,因为这种编程方式,将其视为临时修复。

希望这将帮助其他人在未来