Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida na função removeLinha

Galera bom dia,

Gostaria de entender porque este codigo não exclui a linha definitivamente:

function removeLinha() {
    event.preventDefault();
    $(this).parent().parent().fadeOut(1000);
    setTimeout(function() {
        $(this).parent().parent().remove();
    }, 1000);
}

E este sim:

function removeLinha() {
    event.preventDefault();
    var linha = $(this).parent().parent();

    linha.fadeOut(1000);
    setTimeout(function() {
        linha.remove();
    }, 1000);
}

A diferença pelo que observei seria apenas uma variavel setada..

Valeu pessoal, abraços.

3 respostas
solução!

Olá, Anderson. Tudo bom?

Por favor, adicione uns console.log no seu código e você verá que o this que está dentro do setTimeout será o window. Por exemplo:

 function removeLinha() {
    event.preventDefault();
    console.log('Fora do setTimeout', this)
    $(this).parent().parent().fadeOut(1000);
    setTimeout(function() {
        console.log('Dentro do setTimeout', this)
        $(this).parent().parent().remove();
    }, 1000);
}

Quando fazemos setTimeout, na verdade estamos fazendo um atalho para window.setTimeout, por isso que o this é diferente dentro do setTimeout.

Excelente resposta. Muito obrigado, não havia me tocado que o "this" fazia referencia ao Settimeout. brigadão :) abraços.

Show! Anderson. Fico feliz em ter te ajudado. Tem um post explicando como funciona o this do JavaScript no blog da Caelum, eu recomendo você ler ele: http://blog.caelum.com.br/as-multiplas-personalidades-do-this-em-javascript/