Ir para conteúdo

POWERED BY:

Arquivado

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

Micilini Roll

Executar função assim que outra terminar

Recommended Posts

Seguinte pessoal eu tenho 3 links e 3 divs:

 

<a onclick="ler_logo_2('usuarios')">Link 01</a>
<a onclick="ler_logo_2('seguranca')">Link 02</a>
<a onclick="ler_logo_2('personalizar')">Link 03</a>


<div id="usuarios" class="Caixas_Config">
Oi eu sou a div 01
</div>

<div id="seguranca" class="Caixas_Config">

Oi eu sou a div 02
</div>

<div id="personalizar" class="Caixas_Config">
Oi eu sou a div 03
</div>

 

Beleza ate ai esta tudo normal, agora existe uma função chamada ler_logo_2(), esta função se encontra da seguinte maneira:

 

function ler_logo_2(wan){

if(wan == "usuario"){
$('.Caixas_Config').fadeOut('fast');

setTimeout(function(){$('#wan').fadeIn('slow')},500);

}

if(wan == "personalizar"){
$('.Caixas_Config').fadeOut('fast');
setTimeout(function(){$('#wan').fadeIn('slow')},500);
}

if(wan == "seguranca"){
$('.Caixas_Config').fadeOut('fast');
setTimeout(function(){$('#wan').fadeIn('slow')},500);
}

}

 

O que esta aconteçendo é o seguinte, se eu clicar nos 2 links simultaneamente, o javascript ira executar as duas funções, causando uma especie de erro fazendo com que envez de 1 div ficar na tela ficam 2 divs na tela, sendo que pela logica do comando acima é que uma delas teria que fechar e somente sobrar uma div aberta na tela.

 

Então a minha duvida é a seguinte, como eu posso fazer com que 1 comando seja executado de cada vez. (ou seja, se eu clicar no link 1 e logo em seguida no link 2, o link 2 somente sera executado quando o comando do link 1 estiver concluido)

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma especie de erro fazendo com que envez de 1 div ficar na tela ficam 2 divs na tela

isso é por causa dos seus setTimeOuts. Vc precisa parar um para depois fazer outro, ai esse comportamento não irá ocorrer.

 

us clearTimeout para impedir que mais de um timeout seja executado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estava pensando aqui em uma solução, criarei uma variavel chamada (local), que irá armazenar o nome da div que foi clicada, dai quando clicaremos no link tera um comando deste tipo:

 

 

var local;

if(wan == "usuarios"){

local = wan;

}

if(wan == "personalizar"){

local = wan;

}

if(wan == "seguranca"){

local = wan;

}

 

e no final do codigo, haverá um comando que ira pegar o conteudo dessa variavel 'local', e irá fechar todas as outras divs (display:none;), menos aquela que esta cuja referencia esta armazenada na variavel local.

 

@Bruno eu tentei aqui mas nao deu certo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse seu código faz a mesma coisa que:

var local = wan;

E não foi isso que eu disse para vc fazer. Como vc tentou usar o clearTimeout que eu sugeri ?

se vc não mostrar sua tentativa, não tenho como te falar oque vc errou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

bem eu tentei usar o clearTimeOut das seguintes maneiras:

 

 

  1. Coloquei no final de cada codigo localizado logo abaixo de cada um dos setTimeOut
  2. Coloquei no final do codigo (mais especificamente no final do ultimo if)
  3. Criei uma função separada chamada clear(), e dentro de cada um dos setTimeOut alem de chamar o FadeIn chamei a função clear

 

 

Em todos eles eu ultilizei somente o comando:

 

clearTimeout();


Bem pessoal o problema foi resolvido da seguinte maneira, observem:

 

<script>
var local;
function ler_logo_2(wan){

if(wan == "usuario"){
$('.Caixas_Config').css('display','none');
setTimeout(function(){$('#caixa_'+wan+'_p1').fadeIn('slow'); clear();},500);
local = 'caixa_' + wan + '_p1'; 
}

if(wan == "personalizar"){
$('.Caixas_Config').css('display','none');
setTimeout(function(){$('#caixa_'+wan+'_p1').fadeIn('slow'); clear();},500);
local = 'caixa_' + wan + '_p1'; 
}

if(wan == "seguranca"){
$('.Caixas_Config').css('display','none');
setTimeout(function(){$('#caixa_'+wan+'_p1').fadeIn('slow'); clear();},500);
local = 'caixa_' + wan + '_p1'; 
}

}

function clear(){

if(local == 'caixa_usuario_p1'){
$('.Caixas_Config').css('display','none');
$('#'+local).css('display','block');
}

if(local == 'caixa_personalizar_p1'){
$('.Caixas_Config').css('display','none');
$('#'+local).css('display','block');
}

if(local == 'caixa_seguranca_p1'){
$('.Caixas_Config').css('display','none');
$('#'+local).css('display','block');
}

}

 

agora se voces tem mais alguma sugestão eu aceito...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vc usou errado a minha sugestão.

 

como argumento do clearTimeout() vc deve informar qual é o timeout q vc quer limpar.

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.