选择 - 仅在更改时获取上一个值和新值

时间:2016-06-06 20:13:29

标签: javascript jquery

我有一个页面上有几个选择框,我的目标是捕获我在下面的代码中设法实现的先前值和新值。 这构建了一对一的数组配对,因此前一个数组位置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令牌设置。

1 个答案:

答案 0 :(得分:1)

为什么不直接推送到一个阵列而不是两个阵列。这样,您可以获取数组长度/计数以确定是否存在先前选择的选项?

if(item.length >= 2 ){
// do something
}