Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何从multiselect中获取最后选定的选项?_Jquery_Multi Select - Fatal编程技术网

Jquery 如何从multiselect中获取最后选定的选项?

Jquery 如何从multiselect中获取最后选定的选项?,jquery,multi-select,Jquery,Multi Select,我正在寻找一种方法,使用jQuery以多选形式获取最后一个用户选择的选项 我不是在查找列表上的最后一项,而是在查找用户单击的最后一项。类似于这样的内容 var lastSelected = null; $('.multiSelectOptions').click(function(){ lastSelected = this.value; }); 当用户按住Ctrl键并单击并选择多个项目时,使用上述答案中的this.value将失败——它返回列表中第一个选择的值,即使这不是最后一次单击

我正在寻找一种方法,使用jQuery以多选形式获取最后一个用户选择的选项

我不是在查找列表上的最后一项,而是在查找用户单击的最后一项。

类似于这样的内容

var lastSelected = null;
$('.multiSelectOptions').click(function(){
    lastSelected = this.value;
});

当用户按住Ctrl键并单击并选择多个项目时,使用上述答案中的
this.value
将失败——它返回列表中第一个选择的值,即使这不是最后一次单击的值。试试这个:

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];
    }
});

基本上,您需要维护一个堆栈,以跟踪最后选定的项目。我编写此函数是为了更新堆栈

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;
}
我不妨向您展示我的完整代码:

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);
}
这是multi-select的连接:

// Hookup function to change events of select lists
$('#SelectedReportNumbers').change(reportNumberChanged);

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

您必须自己跟踪上次选择的项目。1。无需使用
每个
,以及2。当
此.value
更容易时,不要使用
$(this).val()
// Hookup function to change events of select lists
$('#SelectedReportNumbers').change(reportNumberChanged);