在多选下拉jquery中获取最近选择的选项的索引
Get the index of recently selected option in multiselect dropdown jquery
我的html页面中有一个选择下拉列表。如何获取最近选择的选项的索引,而不是最后一个选项的索引。我看到我们可以使用'last'
,但它会给出最后一个选项,该选项不是最新的。
.HTML
<select class="carMenu" name="cars" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
jQuery
$(document).ready(function () {
$('.carMenu').change(function(){
console.log($('option:selected',$(this)).index());
});
});
如果我们选择"欧宝",然后选择"沃尔沃",我们应该得到零作为索引。但现在它给出了"欧宝"的索引。
每次,我都会得到carMenu
值,其中包含所有选定选项的值,然后将其与上次进行比较以检测最近添加了哪个项目。代码还支持取消选择选项。事实上,它会保留一堆indexes
并在取消选择时弹出index
。尝试代码:
var recent_options = selected_options = added_options = removed_options = [];
var current_values, index;
$(document).ready(function () {
$('.carMenu').change(function(){
current_values = $(this).val();
if (current_values && current_values.length > 0) {
added_options = current_values.filter(function(x) { return recent_options.indexOf(x) < 0 });
if (added_options.length > 0) {
selected_options.push($(this).find("option[value='" + added_options[0] + "']").index());
console.log("last selected option is : " + selected_options[selected_options.length-1]);
}
else {
removed_options = recent_options.filter(function(x) { return current_values.indexOf(x) < 0 });
if (removed_options.length > 0) {
index = selected_options.indexOf($(this).find("option[value='" + removed_options[0] + "']").index());
if (index > -1)
selected_options.splice(index, 1);
console.log("last selected option is : " + selected_options[selected_options.length-1]);
}
}
}
recent_options = current_values ? current_values : [];
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select class="carMenu" name="cars" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
如果您不希望支持取消选择选项,只需删除else
if (added_options.length > 0)
的一部分即可。
另请注意indexOf
浏览器支持。
小提琴:https://jsfiddle.net/m3hranTi/uzc9jzps/
不要使用 .change()
事件,而是在选项上使用 .click()
。
$(function() {
$('.carMenu option').click(function() {
if ($(this).is(':selected')) {
console.log($(this).index());
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select class="carMenu" name="cars" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
相关文章:
- jQuery最近父级的数据属性选择器
- 多选获取最近选择的选项值
- Rally App SDK 1.32:在最近的重组后,选择器无法使用通用查询访问PortfolioItems
- 选择一个元素,使其最近的具有特殊属性的父元素具有特殊值
- Javascript最近的p标记文本未选择
- 选择离按钮最近的文本区域
- 在多选下拉jquery中获取最近选择的选项的索引
- 选择最近的(选择器)元素
- Jquery 选择元素下一个/上一个/最近
- 使用多个选择器查找DOM中最近的元素
- 从最近选择的下拉选项中获取文本,点击class按钮
- 选择最近的类并使用jQuery删除它
- 选择Array中给定索引两侧最近的2个元素
- 导航元素到最近的输入或选择元素
- 在多个选择框中获取最近的选择
- 滚动最近选择的对象在jquery切换到页面的顶部
- 使用本机DOM的最近祖先匹配选择器
- Angularjs从一个选择框中按月筛选最近12个月的数据
- 获取最近选择框的值
- 另一个最接近的子线程:查找与选择器匹配的元素的最近祖先