我有一个页面上有几个选择框,我的目标是捕获我在下面的代码中设法实现的先前值和新值。 这构建了一对一的数组配对,因此前一个数组位置0应该是更新数组位置0中新值的先前值。有服务器端处理来验证传回的数据,所以这部分不会让我太担心。
问题是 - 如果用户点击选择框抛出焦点事件,我捕获前一个值,如果用户然后决定保持相同的值,他们只需点击它就可以更改事件抛出,使我的数组不同步,并留下一个错误的先前值(如果它没有改变,我不需要像以前那样捕获它。)
我是否过于复杂?任何有关更好地处理用户选择相同值的建议或观点都将不胜感激。
var updates = [];
var previous = [];
$("select").on('focus', function () {
item = {};
item["id"] = this.value;
item["name"] = $(this).find('option:selected').text();
previous.push(item);
}).change(function() {
item = {};
item["id"] = this.value;
item["name"] = $(this).find('option:selected').text();
updates.push(item);
});
感谢下面答案中的指针,我最终得到了以下代码;
var updates = [];
$("select").on('focus', function () {
item = {};
item["id"] = this.value;
item["name"] = $(this).find('option:selected').text();
updates.push(item);
}).change(function() {
if (updates.length > 1) {
updates = updates.slice(updates.length-1,updates.length);
}
previousPos = updates.length-1;
newItem = {};
updates[previousPos]["newid"] = this.value;
updates[previousPos]["newname"] = $(this).find('option:selected').text();
$(this).blur();
$.ajax({
type: 'POST',
url: '/update',
data: JSON.stringify(updates)
});
});
我正在使用ajaxSetup在其他地方处理CSRF令牌设置。
答案 0 :(得分:1)
为什么不直接推送到一个阵列而不是两个阵列。这样,您可以获取数组长度/计数以确定是否存在先前选择的选项?
if(item.length >= 2 ){
// do something
}