Ir ao conteúdo
  • Cadastre-se
ismalty

Como interromper uma função

Recommended Posts

Galera, estou tendo um problema com funções que podem gerar varios resultados.

Vou colocar um codigo mais simples do q estou implementando pra facilitar:

O problema é que queria que quando clicasse em #avisos, saísse completamente da função, mas o que acontece é que fica rodando dentro do if, e quando clico duas vezes no documento muda o texto dentro de #avisos.

Ja tentei um monte de coisa e nada da certo, alguem sabe o que posso fazer?

desde de ja, grato

o codigo nao tinha ficado endentado, ai coloquei pra ajudar a entender:

function mouse(){
if ( contador === true )
{
var cont = 0;
$(document).bind("mousemove", function(evento){
var xcaminho = evento.pageX;
var ycaminho = evento.pageY;
cont++;
$("#avisos").click(function(){
$(document).unbind("mousemove");
contador = false;
return null;
mouse.stopImmediatePropagation();
})
$(document).dblclick(function(){
$("#avisos").html("Documento <br>Cont = "+cont+"<br>Contador = "+contador);
})
});
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

de uma estudada sobre break label, é (na minha opinião) a única forma de parar algo no meio da "coisa".

dizendo e não dizendo que é meio algo como goto em outras linguagens, porém no Java o goto não foi implementado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, pelo que pesquisei, o break label so funciona em laços de repetição, nao da pra usar na função... esse negocio de nao conseguir sair da função assim que clica no objeto ta atrapalhando td logica do programa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

Talvez não esteja usando a função stopImmediatePropagation(); corretamente.

Note que você está usando o nome da função seguido da função de parar.. o jeito certo de utilizar é adicionando um argumento e chamando por este argumento.

tente desta maneira:


function mouse(){
if ( contador === true )
{
var cont = 0;
$(document).bind("mousemove", function(evento){
var xcaminho = evento.pageX;
var ycaminho = evento.pageY;
cont++;
$("#avisos").click(function([COLOR="Red"]e[/COLOR]){
$(document).unbind("mousemove");
contador = false;
return null;
[COLOR="red"]e.stopImmediatePropagation();[/COLOR]
})
$(document).dblclick(function(){
$("#avisos").html("Documento <br>Cont = "+cont+"<br>Contador = "+contador);
})
});
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

nem assim funciona viu... unico jeito que to conseguindo fazer é meio na gambiarra, dando um unbind no dblclick, continua executando a função, mas nao entra mais na condição... mas acho que mais pra frente isso vai me dar problemas novamente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o exemplo com o site http://jsfiddle.net/

é um testador online. assim podemos estar o código e tentar resolver.

note que lá possui 4 espaços, o html fica no topo na esquerda, o jquery fica no quadrado abaixo.. o css fica no topo a direta. ( selecione o jquery na lista de scripts) .. depois clica em save.. e cola o link aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ismalty,

Vou dar um palpite rápido: experimentou colocar o return null; depois da chamada ao event.stopImmediatePropagation();?

Do jeito como está, o método nunca é executado.

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

mudando o return null de lugar tb nao mudo nd...

o link com o codigo funcionando é

http://jsfiddle.net/xYKwP/

o problema é que quando clica no objeto (o quadrado cinza) não para de executar a função, o que acontece é que so desabilita do "bind("mousemove")". Tentei todas maneiras que já vi na net, que é colocar um if, colocar o return null e o event.stopImmediatePropagation(), mas nd da certo...

Galera, fazendo uns testes descobri o seguinte:

A função so é executada uma vez, porém, a partir da sua execução ela cria os eventos click e dblclick, que continuam operantes mesmo depois que sai da função. Ai o unico jeito é usando .bind para criar os eventos e .unbind para "deletar" o evento.

Valeu pela ajuda galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×