Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jerri Dick

Escopo de variáveis locais vazando para Document

Recommended Posts

Olá estou criando alguns plugins de slide e custom select com javascript sem jquery, porem estou tenho um pequeno problema quanto ao escopo de uma variável.

 

Link para Jsfiddle: http://jsfiddle.net/lordskynner/9fCNX/

 

Bem, no exemplo tenho 3 divs, e uma função construtora para cada um deles, e, um evento onclick no document sendo adicionado em cada chamada do construtor, onde dou um alert com o id do elemento, e mudo a cor de fundo deste elemento.

 

O problema é que, por algum motivo que não consegui descobrir ainda, quando clico no document, ele só da um alert do ultimo elemento chamado pelo construtor, e só troca a cor do ultimo elemento, como se ele tivesse subscrito a variável criada nos 2 primeiros.

 

Na minha idéia, ele deveria, ao clicar no Document, dar um alert de cada um dos elementos, e alterar o fundo dos 3.

 

Alguem poderia me mostrar o que estou fazendo de errado, ou não estou fazendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não é problema de escopo não.. dei uma limpada no teu código, e refiz com classe no CSS, pq algumas manipulações com js são lentas.

<div id="div1">DIV 1</div>
<div id="div2">DIV 2</div>
<div id="div3">DIV 3</div>

<style>
div{
    width: 100px;
    height: 100px;
    border:#000 solid 1px;
    margin:10px
}
.is-active { background: #c6c6c6; }
</style>
<script>
var Fntest = function(elem){

    var _self = this;
    _self.elem = elem;
    _self._enter = function(){


        if (_self.elem.className === "is-active") {
            _self.elem.className = "";
        } else {
            _self.elem.className = "is-active";
        }


    };

    _self.elem.addEventListener("click", function(e){
        e.stopPropagation();

        _self._enter();
    });

};

var t1 = new Fntest(document.getElementById('div1'));
var t2 = new Fntest(document.getElementById('div2'));
var t3 = new Fntest(document.getElementById('div3'));
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.