Pergunta

Com base na minha pergunta anterior aqui e aqui, Descobri que posso definir um cookie com JavaScript. Quero combiná -lo com o jQuery para ter um estado de biscoito definido para linhas de mesa alternadas. Eu quero manter as linhas escondidas escondidas na recarga.

Aqui está o que consegui até agora:

// Load cookies if any   
if(readCookie('togState')) {
       $('table#toggle tr.' + readCookie('togState')).hide();
    }

    $(function() {
        $('table#toggle tr.container').click(function() {
          var idTog = $(this).attr('id');
            $(this).toggleClass('off').nextAll('.' + idTog).toggle();
            setCookie('togState', idTog, 30);
            alert('Cookies: ' + readCookie('togState'));
        });

});

O pai: <tr id="parent-1" class="container">

Os seguintes filhos: <tr class="contained parent-1"> , etc.

Como você pode ver, o cookie é lido, mas não está definido na atualização do navegador. O que estou fazendo errado?

O que eu quero é ocultar quaisquer linhas alternadas (tendo suas classes iguais ao ID do contêiner dos pais), se o contêiner pai for clicado e, portanto, o cookie estiver definido.

qualquer ajuda seria muito bem vinda. Obrigado.

O cookie de origem que usei para verificação rápida:

function setCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    setCookie(name,"",-1);
}

ATUALIZAR:

Eu também tentei cada função sem sorte:

$('table#toggle tr.' + readCookie('togState')).each(function() {
     $(this).hide();
   });

Atualização 2:

Se eu fizer o cheque dentro do jQuery (usei Hide ()), funciona, Mas apenas para um único biscoito. Então o problema real agora é Como manter mais cookies para mais linhas dos pais?

Foi útil?

Solução

Se você está usando o setCookie() função de esta resposta, você está definindo seu cookie para ter uma vida inteira de 30 segundos. Provavelmente, isso não é o suficiente para seus requisitos, e você provavelmente deve aumentar o aumento de isso um pouco. :-)

EDITAR Re: sua pergunta Editar - Se você está tentando definir vários cookies, terá um problema com a seguinte linha:

document.cookie = name+"="+value+expires+"; path=/";

Aqui, você está substituindo o cookie propriedade toda vez que você liga setCookie(). Se você deseja definir vários cookies, precisar setCookie()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top