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