【发布时间】:2018-02-08 15:37:10
【问题描述】:
我有一个 jquery 代码,它正在使用我的 select2 标签。它运行良好:
$('select').select2({
placeholder: 'Select a month'
});
$("select").on("select2:select", function(evt) {
var element = evt.params.data.element;
var $element = $(element);
window.setTimeout(function() {
if ($("select").find(":selected").length > 1) {
var $second = $("select").find(":selected").eq(-2);
$element.detach();
$second.after($element);
} else {
$element.detach();
$("select").prepend($element);
}
$("select").trigger("change");
}, 1);
});
$("select").on("select2:unselect", function(evt) {
if ($("select").find(":selected").length) {
var element = evt.params.data.element;
var $element = $(element);
$
("select").find(":selected").after($element);
}
});
<link href="https://rawgit.com/select2/select2/master/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/select2/select2/master/dist/js/select2.full.js"></script>
<select multiple="multiple" style="width: 300px">
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
但是我有问题,当我使用多个选择框时,我的代码不再正常工作:
$('select').select2({
placeholder: 'Select a month'
});
$("select").on("select2:select", function(evt) {
var element = evt.params.data.element;
var $element = $(element);
window.setTimeout(function() {
if ($("select").find(":selected").length > 1) {
var $second = $("select").find(":selected").eq(-2);
$element.detach();
$second.after($element);
} else {
$element.detach();
$("select").prepend($element);
}
$("select").trigger("change");
}, 1);
});
$("select").on("select2:unselect", function(evt) {
if ($("select").find(":selected").length) {
var element = evt.params.data.element;
var $element = $(element);
$
("select").find(":selected").after($element);
}
});
<link href="https://rawgit.com/select2/select2/master/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/select2/select2/master/dist/js/select2.full.js"></script>
<select multiple="multiple" style="width: 300px">
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
<select multiple="multiple" style="width: 300px">
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
<select multiple="multiple" style="width: 300px">
<option value="JAN">January</option>
<option value="FEB">February</option>
<option value="MAR">March</option>
<option value="APR">April</option>
<option value="MAY">May</option>
<option value="JUN">June</option>
<option value="JUL">July</option>
<option value="AUG">August</option>
<option value="SEP">September</option>
<option value="OCT">October</option>
<option value="NOV">November</option>
<option value="DEC">December</option>
</select>
这意味着它只适用于最后一个选择框。
【问题讨论】:
-
我不确定您要在第二个 sn-p 中实现什么。显然与
select2:select处理程序有关,因为 A. 如果您删除它,插件工作正常。 B. 对于每个select事件,您在所有selects 上运行是没有意义的。 (你打电话给$('select')而不是$element) -
@MoshFeu 谢谢你的回答。能给我举个例子吗?我不知道你到底是什么意思
-
一旦我了解了你第二次 sn-p 背后的动机,我会告诉你的。你想做什么?
-
第二个 sn-p 是什么意思?你的意思是“取消选择功能”?
-
您的问题中有 2 个代码 sn-ps。第一个只有 1 个选择,第二个只有 3 个
selects 对吗?我的意思是,第二个..第一个有效,因为$('select')仅返回 1,但是当您添加更多时,$('select')返回所有 3 个selects。
标签: jquery select jquery-select2