Can anyone identify the error in this code? [closed]

0

Days ago I asked a question about how to add a class to an element when clicking the button , the answers were satisfactory (I did using JQuery as me

sessionStorage.removeItem('Contar');
function AddClass(id){
    //pega o valor do botao
    var tipo = document.getElementById(id).value;
    //pegar o item da lista
    var iten = document.getElementsByTagName('li');
    //cria uma sessão para gravar os valores dos cliques
    if(typeof(Storage)!=="undefined"){
        if(sessionStorage.Contar){
            if(tipo == 'proximo'){
                sessionStorage.Contar=Number(sessionStorage.Contar)+1;
                if(sessionStorage.Contar == iten.length){
                    sessionStorage.Contar=5;
                }
            }else 
            if(tipo == 'anterior'){
                sessionStorage.Contar=Number(sessionStorage.Contar)-1;
                if(sessionStorage.Contar == 0){
                    sessionStorage.Contar=0;
                }
            }
        }else{
            sessionStorage.Contar=0;
        }
    }
    //resgata o valor da sessão
    var valor = sessionStorage.Contar
    if(tipo == 'proximo'){
        if(valor > 0){
            //remove a classe do item anterior
            iten.item(valor-1).removeAttribute('class');
        }
    }else 
    if(tipo == 'anterior'){
        if(valor < 5){
            //remove a classe do item anterior
            iten.item(valor+1).removeAttribute('class');
        }
    }
    //adiciona classe ao próximo item
    iten.item(valor).setAttribute('class', 'selected');
    }

My html is this:

    <button onClick="AddClass('anterior');" id="anterior" value='anterior'>anterior</button>
<button onClick="AddClass('proximo');" id="proximo" value='proximo'>proximo</button>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
    </ul>

I did not post on JSFidle because on my machine the site is getting all bugged as you can see on this link

    
asked by anonymous 05.02.2014 / 15:47

2 answers

5

In addition to the counter error, it is happening that when you retrieve the "counter" in line var valor = sessionStorage.Contar it ends up returning the number as text, so when you try to valor+1 it does "1" + 1 and that "11" and in your list there is item("11") so null .

I used parseInt to solve this. Follow the code with the counter changes too.

function AddClass(id) {
    //pega o valor do botao
    var tipo = document.getElementById(id).value;
    //pegar o item da lista
    var iten = document.getElementsByTagName('li');
    //cria uma sessão para gravar os valores dos cliques
    if(typeof(Storage)!=="undefined"){
        if(sessionStorage.Contar){
            if(tipo == 'proximo'){
                sessionStorage.Contar=Number(sessionStorage.Contar)+1;
                if(sessionStorage.Contar == iten.length){
                    sessionStorage.Contar = iten.length - 1;
                }
            }else 
            if(tipo == 'anterior'){
                sessionStorage.Contar=Number(sessionStorage.Contar)-1;
                if(sessionStorage.Contar < 0){
                    sessionStorage.Contar=0;
                }
            }
        }else{
            sessionStorage.Contar=0;
        }
    }
    //resgata o valor da sessão
    var valor = parseInt(sessionStorage.Contar);
    if(tipo == 'proximo'){
        if(valor > 0){
            //remove a classe do item anterior
            iten.item(valor-1).removeAttribute('class');
        }
    }else 
    if(tipo == 'anterior'){
        if(valor < iten.length){
            //remove a classe do item anterior
            iten.item(valor+1).removeAttribute('class');
        }
    }
    //adiciona classe ao próximo item
    iten.item(valor).setAttribute('class', 'selected');
}

I made a change in count time too, replace 5 with iten.length - 1

    
05.02.2014 / 16:19
5

The error is in this part:

if(tipo == 'anterior'){
  sessionStorage.Contar=Number(sessionStorage.Contar)-1;
  if(sessionStorage.Contar == 0){
    sessionStorage.Contar=0;
  }
}

o if should be equal to -1 and not 0. the correct would be:

if(tipo == 'anterior'){
  sessionStorage.Contar=Number(sessionStorage.Contar)-1;
  if(sessionStorage.Contar == -1){
    sessionStorage.Contar = 0;
  }
}

What happens is that when the Count is subtracted 1, 0-1 = -1 and not 0, as its logic proposed. This is what I saw, just looking at the code above.

    
05.02.2014 / 15:56