C# 从multiselect获取最近选定的列表框项

C# 从multiselect获取最近选定的列表框项,c#,jquery,listbox,C#,Jquery,Listbox,我有一个允许多选的项目列表框。 我试图获取最近选择的项目,不是订单值,而是用户最后选择的项目 如果我尝试打印出.val,我会得到一个所选值的列表,但我想要最近的值,即val中的最后一个值 我尝试使用:last like so: $MainContent\lbTeams选项:选中:last.val 但最后一个按ID从升到降的顺序工作,当有人选择一个值时,它不会按时工作 例如,如果我有一个包含4项的列表框。如果我按升序选择它们,上面发布的内容将正确打印。但是,如果我单击第一个,然后单击第四个,然后返

我有一个允许多选的项目列表框。 我试图获取最近选择的项目,不是订单值,而是用户最后选择的项目

如果我尝试打印出.val,我会得到一个所选值的列表,但我想要最近的值,即val中的最后一个值

我尝试使用:last like so:

$MainContent\lbTeams选项:选中:last.val

但最后一个按ID从升到降的顺序工作,当有人选择一个值时,它不会按时工作

例如,如果我有一个包含4项的列表框。如果我按升序选择它们,上面发布的内容将正确打印。但是,如果我单击第一个,然后单击第四个,然后返回到第二个,我在上面发布的内容将打印第四个项目,即使我最近选择了第二个项目

//when a team is selected
//tell the user what this does to the record
$("#MainContent_lbTeams").on('change', function () {
    //was a value selected?
    var latest_value = $("#MainContent_lbTeams option:selected:last").val();
    var latest_text = $("#MainContent_lbTeams option:selected:last").text();
    alert(latest_value);
    alert(latest_text);
    if ($("#MainContent_lbTeams :selected").length > 0) {
        $("#MainContent_lblTeamMembers").text("Members of '" + latest_text + "':");
        // act only when the returned promise is resolved
        PopulateMembers(latest_value).then(function () {
            $("#MainContent_lbMembers_chosen a").removeClass("search-choice-close");
        });
    }
});

是否还有其他方法可用于提取我的multiselect列表框的最新选定值?

不确定是否有更好的方法,但由于它是多个,您可以在“已添加”和“已删除”中找到所有已添加和已删除对象的对象数组


我最终做了一些不同的事情。 考虑到multi-select的.val存储为数组,我计算了两个数组之间的差异。以下是我的结论:

            var myTeam = [];
        $("#trMembers").hide();
        $("#MainContent_lbTeams").on('change', function () {
            //was a value selected?
            //store the difference of what teams are selected vs myTeam[]
            var diff = [];
            jQuery.grep($("#MainContent_lbTeams").val(), function (el) {
                if (jQuery.inArray(el, myTeam) == -1) diff.push(el);
            });

            if (diff.length > 0) {
                var latest_value = diff; //has the latest selected value
                var latest_text = $("#MainContent_lbTeams option[value='" + diff + "']").text(); //stores the text
                if ($("#MainContent_lbTeams :selected").length > 0) {
                    $("#dTeamNotice").show();
                    $("#MainContent_lblTeamMembers").text("Members of '" + latest_text + "':");
                    // act only when the returned promise is resolved
                    PopulateMembers(latest_value).then(function () {
                        $("#MainContent_lbMembers_chosen a").removeClass("search-choice-close");
                        $("#trMembers").fadeIn();
                    });
                } else {
                    //hide it...
                    $("#dTeamNotice").css("display", "none");
                    $("#trMembers").hide();
                }
            }
            myTeam = $("#MainContent_lbTeams").val();
        });

这对我来说似乎不太好…似乎这应该简单得多。没有其他方法可以获取最新的选定值吗?@john什么方法不起作用?你能看一下演示并确认它工作正常吗?您可以将这两个值都存储在数据中,这将使它变得更简单。我马上就添加。演示使用的是一个下拉列表。我有一个多重选择,允许多重选择。最初,当我选择一个值时,我会遇到问题,因为没有选择最后一个值-因为它是第一个值。您可以看到,我正在尝试在populatemembers代码中进行ajax调用,但没有为此显示代码。最新的_值似乎未定义,然后当我在列表框中选择一个新值时,因为它是multi-select,它会使用先前的选择而不是当前的选择更新ajax代码…@JonH我现在看到了你的问题,我错过了阅读multi-part。我已经更新了我的答案,将当前选择的与先前选择的进行比较,以返回两个不同的阵列:1个用于添加,1个用于删除。我也看到你也回答了这个问题。不确定是否需要,但你的只考虑了加法而不是乘法。我不确定在更改事件之前是否可以进行多次添加,但可以进行多次删除。
            var myTeam = [];
        $("#trMembers").hide();
        $("#MainContent_lbTeams").on('change', function () {
            //was a value selected?
            //store the difference of what teams are selected vs myTeam[]
            var diff = [];
            jQuery.grep($("#MainContent_lbTeams").val(), function (el) {
                if (jQuery.inArray(el, myTeam) == -1) diff.push(el);
            });

            if (diff.length > 0) {
                var latest_value = diff; //has the latest selected value
                var latest_text = $("#MainContent_lbTeams option[value='" + diff + "']").text(); //stores the text
                if ($("#MainContent_lbTeams :selected").length > 0) {
                    $("#dTeamNotice").show();
                    $("#MainContent_lblTeamMembers").text("Members of '" + latest_text + "':");
                    // act only when the returned promise is resolved
                    PopulateMembers(latest_value).then(function () {
                        $("#MainContent_lbMembers_chosen a").removeClass("search-choice-close");
                        $("#trMembers").fadeIn();
                    });
                } else {
                    //hide it...
                    $("#dTeamNotice").css("display", "none");
                    $("#trMembers").hide();
                }
            }
            myTeam = $("#MainContent_lbTeams").val();
        });