Jquery deixa de funcionar após requisição AJAX

921 views
Skip to first unread message

Rafaell Pinheiro

unread,
Nov 19, 2010, 6:13:48 AM11/19/10
to javasf: JavaServer Faces Group
Olá pessoal,

Estou com o seguinte problema:
Estou utilizando um carroussel com jquery através de um arquivo js
externo. Incluo esse arquivo em minha pagina xhtml com a4j:loadscript.
O que acontece é que no load da página o carroussel funciona
perfeitamente, porém assim que faço alguma requisição AJAX o mesmo
deixa de funcionar, como se não soubesse mais o que fazer, por não
encontrar a lib ou alguma coisa do tipo.

Em resumo, meu jquery só funciona após pressionar f5 na página, porém
qualquer requisição ajax o faz deixar de funcionar. Já tentei colocar
o a4j:loadScript em varios pontos da pagina, separar regioes etc, mas
até então tudo sem sucesso.

Alguma dica?


Abraço

Rafaell Pinheiro

Rafael Ponte

unread,
Nov 19, 2010, 7:12:00 AM11/19/10
to jav...@googlegroups.com
Rafaell, tudo bom?

Isso normalmente acontece após um re-render. Bem, o que estou querendo dizer é: quando você carrega a página pela primeira vez o jQuery (ou qualquer código javascript) adiciona um ou mais eventos a determinados elementos HTML (digamos que um DIV ou LI) na página e tudo funciona normalmente, contudo após um evento ajax (que efetua um reRender nesses elementos HTML) parte da árvore DOM da página é recriada e esses mesmos elementos "nascem" sem os eventos anteriormente aplicados, pois os mesmos foram aplicados dinamicamente via javascript.

Meio complicadinho de explicar, mas acho que dá pra entender! Espero :-)

O que você tem que fazer é reaplicar os eventos a estes elementos novamente via javascritpt após um rerender (normalmente no evento oncomplete de um componente do Richfaces ou repintando o código javascript responsável por aplicar o evento). Enfim, você precisa aplicar novamente o evento via javascript.


2010/11/19 Rafaell Pinheiro <rafa...@gmail.com>

--
Você recebeu esta mensagem por que é membro do  Javasf
http://groups.google.com/group/javasf

Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Rafael Ponte
http://www.rponte.com.br

Rafaell Pinheiro

unread,
Nov 19, 2010, 7:18:15 AM11/19/10
to jav...@googlegroups.com
ok Rafael, entendido, obrigado pela resposta.

Usar o oncomplete para aplicar novamente o javascript não ficou claro pra mim, já que não tenho um seletor, não sei como faria isso.

Alguma dica?

abs

Rafaell

2010/11/19 Rafael Ponte <rpo...@gmail.com>



--
Rafaell Pinheiro Sousa

Rafael Ponte

unread,
Nov 19, 2010, 7:21:33 AM11/19/10
to jav...@googlegroups.com
Como o evento é aplicado na página?

2010/11/19 Rafaell Pinheiro <rafa...@gmail.com>

Rafaell Pinheiro

unread,
Nov 19, 2010, 7:24:44 AM11/19/10
to jav...@googlegroups.com
tenho somente uma div nomeada "carrossel". o javascript externo captura o nome dessa div e aplica o código.

2010/11/19 Rafael Ponte <rpo...@gmail.com>



--
Rafaell Pinheiro Sousa

Jordano Celestrini

unread,
Nov 19, 2010, 7:25:40 AM11/19/10
to jav...@googlegroups.com
Dê uma conferida:

http://stackoverflow.com/questions/301473/rebinding-events-in-jquery-after-ajax-update-updatepanel

As versões mais novas do JQuery trazem uma funcionalidade chamada "live" que talvez te ajude com o problema.

Att.,

Jordano Celestrini
Java Architect / Team Leader
Seja Livre! Use GNU/Linux.
Socialmente justo, economicamente viável e tecnologicamente sustentável.


2010/11/19 Rafael Ponte <rpo...@gmail.com>

Marcelo Preis Ferreira

unread,
Nov 19, 2010, 6:28:47 AM11/19/10
to jav...@googlegroups.com
Se você esta inserindo o arquivo do JQuery, retire...
uso o da própria biblioteca...
parece que está usando o richFaces, ache a variável para acessar ele.
Acho que é jQuery, da uma verificada!
Geralmente você não precisa inserir....

Outra coisa, pode ser que você esta atualizando as Tag, do DOM errada... onde começa a gerar esse tipos de problemas...

Rafaell Pinheiro

unread,
Nov 19, 2010, 7:47:29 AM11/19/10
to jav...@googlegroups.com
to usando um arquivo do jquery externo e uma variavel separa com no conflits. vou retirar. Acho que a questão vai exatamente em cima do que rafael falou, to criando uma função pra ser chamada no oncomplete do a4j:form, para forçar a reaplicação do javascript, mas até agora sem sucesso.

abs

Rafaell

2010/11/19 Marcelo Preis Ferreira <preis...@gmail.com>

--
Você recebeu esta mensagem por que é membro do Javasf
http://groups.google.com/group/javasf
 
Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil



--
Rafaell Pinheiro Sousa

Rafael Ponte

unread,
Nov 19, 2010, 7:50:21 AM11/19/10
to jav...@googlegroups.com
Entendi.

O evento é adicionado assim que o javascript é carregado pelo browser, sendo, você pode recarregar o javascript novamente (re-render nele) :-)

2010/11/19 Rafaell Pinheiro <rafa...@gmail.com>

Rafaell Pinheiro

unread,
Nov 19, 2010, 9:38:17 AM11/19/10
to jav...@googlegroups.com
como posso garantir que uma função javascript seja chamada após reRender de uma página?? onde devo colocá-la?

2010/11/19 Rafael Ponte <rpo...@gmail.com>



--
Rafaell Pinheiro Sousa

Rafael Ponte

unread,
Nov 19, 2010, 9:46:27 AM11/19/10
to jav...@googlegroups.com
Basta rerenderiza-la sempre que necessário.

2010/11/19 Rafaell Pinheiro <rafa...@gmail.com>

Rafaell Pinheiro

unread,
Nov 19, 2010, 9:50:09 AM11/19/10
to jav...@googlegroups.com
Rafael o reRender da tag a4LoadScript nao deu certo. Coloquei um ID na tag e mandei renderiza-la em varios lugares: form, link etc... mas esse procedimento não realiza o re-registro da função javascript;

isso deveria sem simples :|

att

Rafaell Pinheiro

unread,
Nov 19, 2010, 11:51:01 AM11/19/10
to jav...@googlegroups.com
só consegui da seguinte forma:

dentro da minha composição do facelest, abaixo da div que quero registrar o evento coloquei:

<script type="text/javascript">
     reloadCarrossel(); //aqui eh chamada uma função de um js externo
 </script>

ai da certinho, segue a lógica q rafael tinha dito, de dizer novamente a DOM os eventos que quero registrar. o que realmente deu trabalho foi localizar o ponto exato pra isso.

abraço e obrigado pela ajuda de todos.



2010/11/19 Rafaell Pinheiro <rafa...@gmail.com>



--
Rafaell Pinheiro Sousa
Reply all
Reply to author
Forward
0 new messages