Как изменить одно значение флажка внутри localStorage?

Я пытаюсь изменить значение внутри localstorage. Этот пункт является статусом флажка. Я хочу, чтобы каждый раз, когда флажок установлен, установить значение true или false для этого флажка. Я пробовал много способов, пока не понял, что вы не можете изменить значение без использования JSON.

Чтобы добавить значение, которое я использую:

localStorage.setItem("status-" + i, $status.is(":checked"));

и для удаления я использую:

var parentId = $this.parent().attr('id');
localStorage.removeItem("'" + parentId + "'");

Теперь, чтобы изменить значение, которое я пробовал:

$itemList.delegate("#status-" + i, 'click', function(e) {

                var $this = $(this);
                var parentId = this.parent().attr('id');            

                if ($this.is(":checked")) { 

                    localStorage.setItem("'" + parentId + "'".val("fdgsdagf"));
                    // Note that alert here works.

                }
});

Вот как выглядит мое локальное хранилище: Надеюсь, кто-нибудь сможет мне помочь. Я работаю над этим несколько дней... Вот скрипт для этого: http://jsfiddle.net/CC5Vw/7/

Большое спасибо


person jQuerybeast    schedule 01.09.2011    source источник
comment
Из того, что я тестировал, установка значения работает нормально, проблема в другом... Проверьте это здесь jsfiddle.net/CC5Vw/7/show должен быть console.log на каждой итерации, сообщающий значения переменных i, j и k. Он запускается только один раз.   -  person WTK    schedule 01.09.2011


Ответы (1)


посмотрите на это: http://jsfiddle.net/Rh4Au/6/ работает хорошо..

заменяет http://jsfiddle.net/CC5Vw/7/ на http://jsfiddle.net/Rh4Au/6/


строка 30:

+ "<div class='checkbox'><input type='checkbox' class='test' id='status-" + i + "'></div>"
i изменено на j, поскольку i – это длина, а j – итератор.


вставка после строки 34:

    var tempasd = orderList[j].split("-")[1];
    if(localStorage.getItem("status-"+tempasd) == "true") {
        $("#status-"+j).get(0).checked = true
    }
    else {
        $("#status-"+j).get(0).checked = false
    }
}

Код загружает данные из localStorage и проверяет отмеченные флажки.
tempasd — это временная переменная, хранящая текущий идентификатор флажка (поскольку они не всегда идут по возрастанию.


изменения со строки 99 на 117:

// ON STATUS CLICK   
console.log('i=',i,' j=',j, 'k=',k);


$itemList.delegate("#status-" + i, 'click', function(e) {  // ON CLICK
    var $this = $(this);
    var parentId = $this.attr('id');    
       
    if ($this.is(":checked")) {


        console.log('set ', parentId, 'to foo');
        localStorage.setItem(parentId, 'foo');
    //            localStorage.setItem("'" + parentId + "'".val("fdgsdagf"));
    //            localStorage.setItem($this.parent().attr('checked', true)); 
    //            window.location = "http://mail.aol.com"
    }

});

to

// ON STATUS CLICK   
console.log('i=',i,' j=',j, 'k=',k);
var tempxx;
for(tempxx = 0;tempxx < j; tempxx++) {
$itemList.delegate("#status-" + tempxx, 'click', function(e) {  // ON CLICK
    var $this = $(this);
    var parentId = $this.parent().parent().attr('id').split("-")[1];   


    

        console.log('set ', parentId, 'to foo');
        localStorage.setItem("status-"+parentId, $this.is(":checked"));
//            localStorage.setItem("'" + parentId + "'".val("fdgsdagf"));
//            localStorage.setItem($this.parent().attr('checked', true)); 
//            window.location = "http://mail.aol.com"

   
});

}

мне нужен цикл, потому что он должен делегировать событие каждому флажку, а также событие должно устанавливать localStorage в false, когда оно снимается.

Кстати, .parent().parent() теперь не нужен, потому что я исправил в строке 30.

person Gergely Fehérvári    schedule 01.09.2011
comment
Как я могу отблагодарить вас, сэр. Хотя, кажется, есть небольшая проблема с заказом. Если вы измените порядок и выберите поле. Я постараюсь разобраться с проблемой. Спасибо еще раз - person jQuerybeast; 01.09.2011
comment
ошибка исправлена. || опять ошибка. пытаюсь исправить. || исправлено. - person Gergely Fehérvári; 01.09.2011
comment
Я не знаю, что сказать. Большое спасибо. Я пытался решить эту проблему целую вечность. - person jQuerybeast; 01.09.2011
comment
Вы должны включить синопсис с кодом, который демонстрирует, как вы устранили проблему, а не просто ссылку на внешний сайт, который работает. - person Jared Farrish; 02.09.2011