如何使用配置了ajax搜索的select2 jquery插件实现选择所有功能。?

Posted

技术标签:

【中文标题】如何使用配置了ajax搜索的select2 jquery插件实现选择所有功能。?【英文标题】:How to implement select all functionality with select2 jquery plugin configured with ajax search.? 【发布时间】:2017-09-05 02:18:30 【问题描述】:

我目前使用 select2 jquery 插件从 ajax 调用动态填充的列表中选择数据。我需要实现全选功能,以便用户能够使用全选按钮一次选择所有选项。我试图在 jsfidde 中按照这个例子来实现这个。

Click here to see the jsfiddle

但是对于选择大量项目的列表说 500 项目。它会使浏览器挂起一段时间。请提出一种更好的方法来实现这一点,而不会出现任何性能问题。

$.fn.select2.amd.require([
 'select2/utils',
 'select2/dropdown',
 'select2/dropdown/attachBody'
 ], function (Utils, Dropdown, AttachBody) 
 function SelectAll()  

SelectAll.prototype.render = function (decorated) 
var $rendered = decorated.call(this);
var self = this;

var $selectAll = $(
  '<button type="button">Select All</button>'
);

$rendered.find('.select2-dropdown').prepend($selectAll);

$selectAll.on('click', function (e) 
  var $results = $rendered.find('.select2-results__option[aria-selected=false]');

  // Get all results that aren't selected
  $results.each(function () 
    var $result = $(this);

    // Get the data object for it
    var data = $result.data('data');

    // Trigger the select event
    self.trigger('select', 
      data: data
    );
  );

  self.trigger('close');
);

return $rendered;

;

 $("select").select2(
placeholder: "Select Option(s)...",
dropdownAdapter: Utils.Decorate(
  Utils.Decorate(
    Dropdown,
    AttachBody
  ),
  SelectAll
  ),
  );
 );

【问题讨论】:

【参考方案1】:

这是重复的问题 JQuery Select2 - How to select all options

为带有复选框的多选给出的解决方案。

如果它的负载比你应该添加额外的隐藏文件来获得逗号分隔值。

试试下面的代码。 html

<select multiple id="e1" style="width:300px">
    <option value="AL">Alabama</option>
    <option value="Am">Amalapuram</option>
    <option value="An">Anakapalli</option>
    <option value="Ak">Akkayapalem</option>
    <option value="WY">Wyoming</option>
</select>
<br>
<input type="checkbox" id="checkbox" >Select All
<br>
<input type="text" id="valueall" value="" name="valueall">

jQuery :

$("#e1").select2();
$("#checkbox").click(function()
    if($("#checkbox").is(':checked') )
        $("#e1 > option").prop("selected","selected");
        <!-- $("#e1").trigger("change"); -->
        $("#e1").select2('destroy'); 
        $("#e1").hide(); 
        $("#valueall").val($("#e1").val())
    else
        $("#e1 > option").removeAttr("selected");
         <!-- $("#e1").trigger("change"); -->
         $("#e1").select2(); 
        $("#e1").show(); 
         $("#valueall").val($("#e1").val())
     
);

您可以为输入字段设置 type="hidden"。

【讨论】:

是的,但是他说它工作正常,但是当我们选择更多 den 500 项时,这会使浏览器挂起。 @Parth 不,我需要确保浏览器不会在选择大量元素时挂起选择全部 @albert 为此,您还可以为全选设置一个复选框,在该复选框上禁用选择并以逗号分隔获取隐藏字段中的所有值。 @Parth 您能否为此实现提供一个有效的 jsfiddle。 ? @albert 我添加了示例代码。你可以试试这个。

以上是关于如何使用配置了ajax搜索的select2 jquery插件实现选择所有功能。?的主要内容,如果未能解决你的问题,请参考以下文章

如果搜索文本只是空格,则 Select2 不应发送 ajax。如何做到这一点?

如何在 select2 类型提前搜索中设置选项值以及如何从 ajax 数据添加选项组

如何以编程方式将搜索查询注入 Select2 v4?

Select2 - Ajax 搜索 - 记住最后的结果

向 Select2 AJAX 控件添加搜索词选项

如何设置select2 ajax预选值?