Basically you need to maintain a stack to keep track of the last item selected. I wrote this function to update my stack.
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; });
And this is my implementation of onChange:
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(); }
I could also show you my full code:
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); }
And this is a multi-select connection:
// Hookup function to change events of select lists $('#SelectedReportNumbers').change(reportNumberChanged);
You can reuse some code to create your own lastSelected implementation.
Tony_KiloPapaMikeGolf
source share