Ir para conteúdo

Arquivado

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

Dian Carlos

Como fazer uma função em jQuery aceitar callbacks?

Recommended Posts

Olá amigos do iMasters.

 

Eu tenho a seguinte função jQuery:

 

function SA_toggleItens(id, classe){
    $('div.' + id + ' .uItens').animate({
        height: 'toggle', 
        opacity: 'toggle'
    }, 150, 'linear');
    $(classe).toggleClass('uToggle2');
}

 

eu chamo ele desta forma:

 

$('div.imoveis .uToggle').click(function(){new SA_toggleItens('imoveis', this);});

 

 

Tenho várias funções em um documento, e de vez em quando eu preciso que, quando a função termine de rodar, ela retorne alguma outra função, por exemplo a função fadeIn():

 

$(this).fadeIn(500, function(){
alert('blah');
});

 

 

Então eu tentei assim (Exemplo):

 

$('div.imoveis .uToggle').click(function(){
new SA_toggleItens('imoveis', this, function(){
						
new SA_editcaseOpen('modules/uImoveis/edit-project.php?uCode=abcdefgh');
						
});
});

 

Só que nunca dá. Tem alguma coisa que eu tenho que por na função pra ela aceitar esse callback?

 

Desde já agradeço a ajuda de todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem sim cara, primeiro esse new q é desnecessário vc pode tirar.

 

outra coisa, é vc ter o argumento desse callback lá na função:

function SA_toggleItens(id, classe, cb){

 

 

http://wbruno.com.br/2011/07/18/vixi-aprendi-jquery-mas-agora/

<script type="text/javascript">
function t(a, b='c', cb=function(){}) {
	console.log(a,b);
	cb();
}
t('a','b', function(){
	console.log('ae');
});
t('a','b');
t('a');
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<script type="text/javascript">
function t(a, b='c', cb=function(){}) {
	console.log(a,b);
	cb();
}
t('a','b', function(){
	console.log('ae');
});
t('a','b');
t('a');
</script>

 

Caso alguém tente executar esse código que o William deixou, e não entenda o erro que possa receber, essa sintaxe para definir o valor padrão de um argumento é da especificação do ECMAScript 6, que atualmente só é suportada no Firefox.

Compartilhar este post


Link para o post
Compartilhar em outros sites

verdade JCMais, segue versão não "problemática"

function t(a, b, cb) {
	console.log(a,b);
	if( typeof cb==='function' ) cb();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

é isso ai bruno, deu certo.

 

Quando eu coloquei o seu código, o Dreamweaver retornou erro de sintaxe. Ai eu fiz mais uma pesquisa na internet e achei uma resposta do Stack Overflow (http://stackoverflow.com/questions/7866787/jquery-calling-a-callback-function-in-a-custom-function).

 

Ai o código ficou assim:

function SA_lightboxClose(cb) {
    /* códigos */
	
 cb();
}

SA_lightboxClose(function(){
   SA_editcaseOpen('modules/uImoveis/photos.php?uCode=<?php echo $uCode ?>');
});

 

Mas esse if(typeof cb === 'function') ? é para verificar se é uma função que tem ali dentro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Mas esse if(typeof cb === 'function') ? é para verificar se é uma função que tem ali dentro?

Isso, é que se você passar um valor que não é uma função, e tentar chamá-la como uma, irá acarretar em um erro:

[inline]TypeError: cb is not a function `cb()`[/inline]

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.