复选框中的LocalStorage删除项目取消选中

时间:2017-03-06 17:32:58

标签: javascript checkbox local-storage

我有一个输入列表[checkbox],当选中时会保存localStorage中的数据属性。 取消选中该复选框后,我无法删除该项目。 这是代码。

$$(".check-productos").on( 'change', function(e) {
    var seleccionproducto = $$(this).data('producto');
    var seleccionsupermercado = $$(this).data('supermercado');
    var seleccionprecio = $$(this).data('precio');
    var productosseleccionados = [];
    var id = $$(this).val(); //guardamos el value, que contiene el precio, del checkbox que activamos
    var p = {};
    p.productos = seleccionproducto;
    p.prodsuper = seleccionsupermercado;
    p.prodprecio = seleccionprecio;
    p.nombre = id;
    productosseleccionados.push(p);     
    var seleccion = productosseleccionados; //guardamos el value, que contiene el precio, del checkbox que activamos
    var nuevovalor = new Array(); // creamos un array vacío
    var getlocal = localStorage.getItem("precios"); //asignamos el elemento "precios" a una varible
    var cont;
    var parslocal;
    if( $$(this).is(':checked') ) {
        //Si el item está activado guarda el valor en localStorage
        if(getlocal != null && getlocal != "" && getlocal != false && getlocal != undefined){ //comprobamos que nuestra variable exista
            parslocal = JSON.parse(getlocal); //Transforma la variable con el contenido de nuestro elemento en localStorage a un objeto Javascript
            $$.each(parslocal, function(index, value){
                cont = index;
                nuevovalor[index] = value; //llenamos nuestro array vacío con los valores que ya existen en nuestro elemento
            });

            cont++;
            nuevovalor[cont] = seleccion;
            localStorage.setItem("precios", JSON.stringify(nuevovalor));
        } else {//en el caso que no exista el elemento en localStorage
            var saveLocal = new Array();//Creamos un nuevo array vacío
            saveLocal[0] = seleccion; //asignamos al comienzo de nuestro array, el valor de nuestro elemento
            localStorage.setItem("precios", JSON.stringify(saveLocal));//guardamos nuestro valor en localStorage
        }

    }else {
        //Si el item no está activado
        if(getlocal != null && getlocal != "" && getlocal != false && getlocal != undefined){//Comprobamos que el elemento existe en localStorage
            parslocal = JSON.parse(getlocal);
            var contador = 0;
            $$.each(parslocal, function(index, value){
                cont = index;
                if(value != seleccion.productosseleccionados[nombre] && value != null && value != undefined && value != false){//si el el valor que estamos haciendo el loop, no coincide al valor ingresado, entonces lo ingresa en el array
                    nuevovalor[contador] = value;
                    contador++;
                }
            });

            if(cont == 0){//si cont es igual a 0, significa que sólo se encuentra en nuestro localStorage el precio que ingresamos, por lo tanto solo eliminamos el elemento completo
                localStorage.removeItem("precios");
            }else{//de lo contrario, existen más valores, pro lo que rehacemos el elemento con los valores que no coincidieron con el encontrado
                localStorage.setItem("precios", JSON.stringify(nuevovalor));
            }
        }
    }
    console.log(JSON.stringify(nuevovalor));
    Template7.data['url:lista.html'] = nuevovalor;
});

PD:This is the original code,我做了一些修改。

0 个答案:

没有答案