我正在使用select 2插件进行多项选择。当我在select 2框中单击时,速度非常慢。显示选项列表或使输入框可用于键入需要时间。可能是因为数据量大。
这是代码
<select multiple class="chosen-multi-select" name="related_cities[]">
<?php if(!empty($all_locations)){
foreach($all_locations as $l):
?>
<option value="<?php echo $l->id;?>" <?php if(in_array($l->id,$related_selected)){ echo "selected"; } ?> ><?php echo $l->location;?></option>
<?php endforeach; } ?>
</select>
这里$l变量有10000多个结果。如何解决此问题。
我最近遇到了同样的问题,并通过编写一个自定义适配器成功地解决了这个问题。
这是我的select2 v4x解决方案
$.fn.select2.amd.define(
"select2/data/customArray",
[
'select2/data/array',
'select2/utils'
],
function(ArrayAdapter, Utils) {
function CustomArrayAdapter ($element, options) {
var data = options.get("data");
var pageLength = options.get("pageLength");
this._data = data ? Array.from(data) : this._items($element);
this._pageLength = pageLength || 25;
CustomArrayAdapter.__super__.constructor.call(this, $element, options);
};
Utils.Extend(CustomArrayAdapter, ArrayAdapter);
CustomArrayAdapter.prototype.query = function (params, callback) {
var pageLength = this._pageLength;
var page = params.page || 1;
var term = params.term;
var pagedData = [];
var data = this._data;
if (!!term) {
data = data.filter(function (elemData) {
return (elemData.text.toLowerCase().indexOf(term.toLowerCase()) > -1)
});
}
pagedData = data.slice(
(page - 1) * pageLength,
page * pageLength
);
callback({
results: pagedData,
pagination: {
more: data.length >= (page * pageLength)
}
});
};
CustomArrayAdapter.prototype._items = function($element) {
var data = [];
var self = this;
var $options = $element.children();
$options.each(function () {
if (
this.tagName.toLowerCase() !== 'option' &&
this.tagName.toLowerCase() !== 'optgroup'
) {
return;
}
var $option = $(this);
var option = self.item($option);
data.push(option);
});
return data;
}
return CustomArrayAdapter;
}
);
现在,这一个处理分页和搜索简单用例。但是,分页不能简单地工作,因为select2应该正确处理结果。
如果我们使用ajax数据,默认适配器会处理它,在我们的情况下,我们需要自己处理它。
因此,您将使用以下选项初始化您的select2。
$('select[name="related_cities[]"]').select2({
pageLength: 15,
dataAdapter: $.fn.select2.amd.require('select2/data/customArray'),
resultsAdapter: $.fn.select2.amd.require(
[
'select2/utils',
'select2/results',
'select2/dropdown/infiniteScroll'
],
function(Utils, ResultsList, InfiniteScroll) {
var CustomResultsList = ResultsList;
CustomResultsList = Utils.Decorate(
CustomResultsList,
InfiniteScroll
);
// If you want additional support functionalities
// you would decorate this with the corresponding decorators.
// please refer to the advanced section of select2 documentation
return CustomResultsList;
}
)
});
我希望,如果我选择“mammals”,动物选择选项只显示值为1的选项data-animal_class。 我知道如何获得哺乳动物值,但我不知道如何使用过滤器 这是我的代码:
问题内容: 我已经建立了这个小提琴作为我在做什么的一个例子。 我正在尝试做的事情在Firefox中可以正常工作。打开选择选项时,字体大小为 14px 。 但是,在Google Chrome浏览器中查看它会选择继承的font-size为 34px 。 理想情况下,我希望将选择选项设置为字体大小 14px 。 这可能吗? 如果需要,我愿意在jQuery中进行任何相关的修复。 谢谢 代码如下… 我的 C
问题内容: 我在表中有三列:id,街道名称,计数。对于某些ID,不只是一个街道名称。Count告诉将每条街道分配给ID的频率。我怎样才能只获得编号最高的ID和街道名称。 表格示例: 结果应该是这样的: 提前致谢! 问题答案: 您没有指定正在使用的数据库,但是应该可以使用以下数据库: 请参阅带有演示的SQL Fiddle 。注意,您将必须使用MySQL的反引号或数据库使用的任何字符来转义保留字来转义
问题内容: 我想设置一个先前选择的要在页面加载时显示的选项。我用以下代码尝试了它: 与 但这是行不通的。有任何想法吗? 问题答案: 这绝对应该工作。确保已将代码放入:
我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件
问题内容: 我正在尝试从以下查询中获取行数。我只得到行计数为1,但有35条记录。您能否让我知道如何从内部查询中获取计数? 谢谢 问题答案: 您缺少FROM,需要为子查询指定别名。