首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从多选中获取最后选择的选项?

问如何从多选中获取最后选择的选项?
EN

Stack Overflow用户
提问于 2011-11-16 17:43:45
回答 3查看 6.4K关注 0票数 11

我正在寻找一种使用jQuery在多选表单中获取用户选择的最后一个选项的方法。

我并不是在寻找列表中的最后一项,而是在寻找用户点击的最后一项。

EN

回答 3

Stack Overflow用户

发布于 2011-11-16 17:48:56

像这样的东西

代码语言:javascript
复制
var lastSelected = null;
$('.multiSelectOptions').click(function(){
    lastSelected = this.value;
});
票数 6
EN

Stack Overflow用户

发布于 2016-10-09 22:25:49

当用户有Ctrl+clicked并选择了多个项时,使用上面答案中的this.value失败--它返回列表中第一个选择的值,即使这不是最后一次单击。试试这个:

代码语言:javascript
复制
var previouslySelected = [];
$("#myMultiselect").change (function() {
    // Get newly selected elements
    var currentlySelected = $(this).val();
    var newSelections = currentlySelected.filter(function (element) {
        return previouslySelected.indexOf(element) == -1;
    });
    previouslySelected = currentlySelected;

    if (newSelections.length) {
        // If there are multiple new selections, we'll take the last in the list
        var lastSelected = newSelections.reverse()[0];
    }
});
票数 2
EN

Stack Overflow用户

发布于 2018-03-12 20:38:30

基本上,您需要维护一个堆栈,以跟踪最后选择的项目。我写了这个函数来更新我的堆栈。

代码语言:javascript
复制
var determineLastSelectedReportNumber = function (selectedReportNumbers, oldSelectedReportNumbers) {
    var newlyAddedReportNumbers = 
    selectedReportNumbers.filter(function (n) {
        return oldSelectedReportNumbers.indexOf(n) == -1;
    });

    var removedReportNumbers = 
    oldSelectedReportNumbers.filter(function (n) {
        return selectedNumberArray.indexOf(n) == -1;
    });

    //Remove the removed reportNumbers from the stack.
    if (removedReportNumbers.length > 0) {                        
        removedReportNumbers.forEach(function (removedReportNumber) {
            for (var i = 0; i < selectedNumbersStack.length; i++) {
                if (selectedNumbersStack[i].toString() === removedReportNumber.toString()) {
                    selectedNumbersStack.splice(i, 1);
                    break;
                }
            }
        });
    }

    //Add the added reportnumbers to the stack. Push();
    if (newlyAddedReportNumbers.length > 0) {
        selectedNumbersStack.push(newlyAddedReportNumbers);
    }

    //Set the last selected from top of the stack. Peek();
    var lastSelectedReportNumber = "";
    if(selectedNumbersStack.length > 0){
        lastSelectedReportNumber = selectedNumbersStack[selectedNumbersStack.length -1];
    }

    return lastSelectedReportNumber;
}

这是我的onChange实现:

代码语言:javascript
复制
var reportNumberChanged = function () {
    var $reportNumber = $(this);
    var selectedNumber = $reportNumber.val();

    oldSelectedNumberArray = selectedNumberArray;
    selectedNumberArray = jQuery.makeArray(selectedNumber);


    var lastSelectedReportNumber = determineLastSelectedReportNumber(selectedNumberArray, oldSelectedNumberArray);
    $("#TheLastSelectedReportNumber").val(lastSelectedReportNumber);        
    resetDelayRetrieveReportInfo();
}

我不妨给你看看我的完整代码:

代码语言:javascript
复制
var selectedNumberArray = jQuery.makeArray($('#SelectedReportNumbers').val());
//Initial selectedNumbersStack.
var selectedNumbersStack = selectedNumberArray;

var counterInitialValue = 3;
var counter = counterInitialValue;
var counterInterval = -1;

function delayRetrieveReportInfo() {
    counter--;
    if (counter === 0) {
        retrieveReportInfo($("#TheLastSelectedReportNumber").val());
        clearInterval(counterInterval);
    }
}

function resetDelayRetrieveReportInfo() {
    clearInterval(counterInterval); //The previous interval is cancelled.
    counter = counterInitialValue;
    counterInterval = setInterval(function () { delayRetrieveReportInfo() }, 1000);
}

这是多选的连接:

代码语言:javascript
复制
// Hookup function to change events of select lists
$('#SelectedReportNumbers').change(reportNumberChanged);

您可以重用我的一些代码来创建您自己的“lastSelected”实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8149532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档