簡體   English   中英

從javascript對象中刪除數組

[英]Remove array from javascript object

上下文

我正在嘗試實現一個功能,以便當用戶單擊表中的復選框時,復選框的屬性valuedata-title應存儲在一個名為selected的JS對象文字中,作為新的鍵值對數組元素。

如果用戶在同一個復選框上再次單擊,則應刪除相應的數組元素。

問題

第一次單擊復選框時,將在按預期selected對象中創建一個數組。

但是,當第二次單擊相同的復選框時,不會刪除相應的數組, 而是添加一個新的(重復的)

var selected = {items:[]};     
$('#table').on('click', 'input[type="checkbox"]', function() {
    var found = false;
    $.each(selected.items, function(i, val) {
        if (val.key == $(this).attr("value")) {
            selected.items.splice(i ,1);
            found = true;
            return false; //step out of each()
        }
    });

    if (found == false) {
        selected.items.push({key: $(this).attr("value"), value: $(this).attr("data-title")});
    }

    console.log(selected);
});

你有錯誤的情況下this里面each 它不再是單擊處理程序中的元素

嘗試

$('#table').on('click', 'input[type="checkbox"]', function() {
    var found = false;
    var value = $(this).val();// store value from `this` before entering `each`
    $.each(selected.items, function(i, val) {
        if (val.key == value) {
            selected.items.splice(i ,1);
            found = true;
            return false; //step out of each()
        }
    });
    ....

首先,我建議使用鍵值對象,因為它更容易查找。

var selected = { items : {} };

這樣您就可以使用訪問所選項目

selected.items[my.key]

也許像這樣想一想......

var selected = {items:{}};     
$('#table').on('change', 'input[type="checkbox"]', function() {
    var checked = $(this).is(":checked"),
        title = $(this).data("data-title"),
        value = $(this).val();

    if (checked && !selected.items[value])
        selected.items[value] = title;
    else if (!checked && !!selected.items[value])
        delete selected.items[value];
});

這個怎么樣:

var selected = { items:[] };

$('#table').on('click', 'input[type="checkbox"]', function() {
    selected.items = $('#table input[type="checkbox"]:checked').map(function(){
        return {
            key: $(this).attr('value'),
            value: $(this).attr('data-title')
        }
    }).toArray()
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM