Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ResoDUTE

Problema em simular um click com javascript/ jquery

Mensagens Recomendadas

ResoDUTE

Boas noites pessoal

Estou com um problema no jquery no qual estou à horas a tentar resolver.

Código Jquery:

$(document).ready(function(){
$("#lang-en").click(function(){
	$("body").changeLang({lang: 'en', file: "translation/files/translation.xml"});
});

$("#lang-pt").click(function(){
	$("body").changeLang({lang: "pt", file: "translation/files/translation.xml"});
});
});

$(document).ready(function() { 
$(".langFlag a").click(function() { 
	$("link").attr("href", $(this).attr('rel'));
	$.cookie("lang", $(this).attr('rel'), {expires: 365, path: '/'});
	return false;
});
});

a primeira função altera a linguagem do site (baseado num ficheiro XML)

a segunda, cria um cookie com o nome da linguagem onde cliquei.

Quando entram na página, por defeito a página está em PT (padrão) e se clicarem na linguagem EN ele cria um cookie chamado lang com o valor lang-en

<a href="javascript:void();" rel="lang-en" id="lang-en">English</a> <a href="javascript:void();" rel="lang-pt" id="lang-pt">Portugues</a>

O problema está em conseguir simular o click automático (document.getElementById('valorID').click():), pois é a única forma que estou a ver de conseguir com que seja feita a alteração automática da linguagem em base do valor do cookie.

Nota: Já tentei com o document.getElementById('ValorID').click(); e não está a funcionar.

Alguém me pode ajudar?

É que isto é urgente.

Cumprimentos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

$(document).ready(function(){

isto só se usa uma vez no código, a não ser que uses namespaces.

O problema não está aí, eu testei sem o codigo jquery e não funciona na mesma.

O problema está em conseguir fazer um click automático na linguagem.

É que o JS não está a conseguir "manipular" o jquery.

Eu nos links meti um onclick="alert()"; e na consola de erros do Java do FF o document.getElementsById('ID').click();, dá um erro.

No IE o onclick="alert()"; funciona.

Mas se for para clicar e executar jquery, ele nao faz.

Dai, que preciso de uma forma em JS, jquery, qualquer coisa, que me simule o click baseado no valor do cookie.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

É que o JS não está a conseguir "manipular" o jquery.

Parece que não percebeste o que é o jQuery : uma biblioteca javascript.

Se queres usar jQuery, não há necessidade de colocar javascrit normal no html, pois o jQuery faz isso por ele próprio.

Mais uma vez, aquilo que indiquei acima faz com o que o código que tens não funcione.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Parece que não percebeste o que é o jQuery : uma biblioteca javascript.

Se queres usar jQuery, não há necessidade de colocar javascrit normal no html, pois o jQuery faz isso por ele próprio.

Mais uma vez, aquilo que indiquei acima faz com o que o código que tens não funcione.

Se lesses tudo que disse, eu esperimentei fazer o click automatico sem o codigo jquery na pagina, e não funciona na mesma.

O FF até detecta o document.getElementsById().click() como erro.

O erro preciso é: o document.getElementsById().click() não é uma função

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Tens um "s" a mais; é getElementById.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

// função testar click
function langChange(){
var cookie1 = "<?php echo $_COOKIE['lang']; ?>";
if(cookie1 == "lang-en"){
	document.getElementById('lang-en').click();
}
}

$(document).ready(function(){
$("#lang-en").click(function(){
	$("body").changeLang({lang: 'en', file: "translation/files/translation.xml"});
});

$("#lang-pt").click(function(){
	$("body").changeLang({lang: "pt", file: "translation/files/translation.xml"});
});


$(".langFlag a").click(function() { 
	$("link").attr("href", $(this).attr('rel'));
	$.cookie("lang", $(this).attr('rel'), {expires: 365, path: '/'});
	return false;
});
});

<body onload="langChange();">
<table border="0" align="center">
<tr>
<td align="center" class="langFlag"><a href="javascript:void();" rel="lang-en" id="lang-en" onclick="alert('teste1');">English</a> <a href="javascript:void();" rel="lang-pt" id="lang-pt" onclick="alert('teste3');">Portugues</a></td>
</tr>
</table>
</body>

Este é o meu código.

O click não está a funcionar. Aqui está uma print do erro:

jserro.png

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

O erro diz tudo, a função não existe.

Se queres ajuda real, escolhe entre usar javascript normal ou jQuery.

Eu já tinha dito isso...

Eu pouco percebo de jquery, daí que vim pedir ajuda a pessoas que percebem.

Se poderes ajudar ou alguém, agradeço muito, pois isto é muito importante.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Mais uma vez, queres usar jQuery ou javascript normal? Já fiz essa pergunta umas 3 vezes .. Continuas a mostrar código feito em jQuery e a dizer que o problema está noutro lado.

Já disse também acima que tens o jQuery mal iniciado, e porquê.

Já disses-te e eu já corrigi, agora só tenho um $(document).ready(function(){ (Como está explicito no excerto de código que expus).

Quero usar Jquery.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Então agora tira todos os onclick do markup e mete um alert dentro de uma função do jQuery a ver se ele é chamado, e usa o firebug / firefox pra ver se dá algum erro quando carregas ou antes.

Não dá nenhum erro, nem ao carregar, nem depois.

Nota: Como deves ter reparado, as funções do jquery só funcionam se clicar no sitio devido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Sim está tudo em ordem neste momento...

Primeiro os ficheiros inclusos ao funcionamento, só depois o código.

E sim, já tirei o onLoad.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

E mesmo assim não dá nada? Deixa aí o código "completo" (só o necessário), mas todo junto.

Isto são funções que só funcionam se eu clicar em algo.

Eu fiz algo deste género, mas foi só para teste:

<?php
if($_COOKIE['lang'] == "lang-en"){
$c1="$('#lang-en').click();";
}
else{
$c1="$('#lang-pt').click();";
}
?>

<body onload="<?php echo $c1; ?>">

Isto assim funciona.

mas queria fazer algo mais bem feito.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Mas então as funções funcionam ou nâo?

funcionam.

agora, quero que ao carregar a página, leia o cookie criado

e em função do valor do cookie (lang-en ou lang-pt), que faça clique na função devida:

$("#lang-en").click(function(){....

ou $("#lang-pt").click(function(){....

já vi que o clique é feito assim: $("#lang-en").click();

agora não sei, em jquery, por isto a funcionar ao carregar a página.

da forma que fiz, não funciona no IE.

Nota: isto tem de funcionar no IE, pois o browser que vai ser usado para usar a página será o IE.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Primeiro, para ler um cookie actualizado precisas de fazer refresh à página, senao o cookie não é devidamente lido. Além disso, mudar a linguagem de um site por ajax não faz sentido, pois terás de carregar muita informação relativa ao mesmo e é mais leve se simplesmente fizeres refresh, a não ser que o que queiras seja outra coisa.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Primeiro, para ler um cookie actualizado precisas de fazer refresh à página, senao o cookie não é devidamente lido. Além disso, mudar a linguagem de um site por ajax não faz sentido, pois terás de carregar muita informação relativa ao mesmo e é mais leve se simplesmente fizeres refresh, a não ser que o que queiras seja outra coisa.

eu tenho um plugin em jquery para mudar a linguagem do site (a tradução é feita em base de um ficheiro XML).

e tenho um outro plugin em jquery, que, ao clicar no href de uma das linguagens, vai criar um cookie com o valor da linguagem clicada (lang-en ou lang-pt).

se é a primeira vez que está a visitar a página, por defeito aparece em PT, pois é a linguagem de construção.

se escolher a linguagem English, a página irá ser traduzida para EN (isto está a funcionar).

o que quero fazer agora é, ao fazer load da página pela segunda vez, carregar o valor do cookie que foi criado na primeira vez e verificar qual das linguagens é, e fazer um clique automático na função.

Porquê isto, assim evita de que cada vez que a pessoa visitar a página ter que mudar a linguagem em cada página que visitar do site.

da forma como fiz (como mostrei antes, não funciona no IE, parece que o IE não está a conseguir fazer o clique, o que é estúpido.)

o click que tenho, não está a fazer o click... o valor do cookie é carregado, é escrito o click, mas no acto de clicar, parece que não clica, se clica, não está a mudar.

Nota: no FF e no Chrome está a funcionar

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
yoda

Para veres se está a funcionar o clique, basta meteres um alert dentro dessa função. Se abrir é porque não é isso que está a falhar.

Não sei que método usa esse plugin para mudar a língua, mas se não tiver nada para prevenir a cache, podes ter aí um problema.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Para veres se está a funcionar o clique, basta meteres um alert dentro dessa função. Se abrir é porque não é isso que está a falhar.

Não sei que método usa esse plugin para mudar a língua, mas se não tiver nada para prevenir a cache, podes ter aí um problema.

A função .click() no load da página, não funciona no IE.

O IE bloqueia esta função por causa dos auto downloads (mais conhecidos como worms, trojans, etc), mas para que seja possível o auto download sem o consentimento do cliente, é preciso usar o ActiveXObject, o que neste momento os browsers estão protegidos.

Experimentei no FF, no Chrome e no Opera, e funciona, o IE é sempre o mesmo "ranhoso".

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Neste caso, o IE é que está correcto. Em questões de segurança, não se vacila.

No caso em concreto, tens bom remédio: crias uma função à parte, que será chamada tanto pelo callback do click, como directamente...


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ResoDUTE

Neste caso, o IE é que está correcto. Em questões de segurança, não se vacila.

No caso em concreto, tens bom remédio: crias uma função à parte, que será chamada tanto pelo callback do click, como directamente...

Não...

o FF está bem mais protegido contra o ActiveX, e não é por isso que bloqueia o .click em window load.

Mas visto de outra forma, o FF não suporta a função, submit(), mas o IE suporta, no qual, esta função pode ser usada da mesma forma do que o click() em window load (ou para os mesmos fins), o IE é esquisito, o IE não tem normas definidas (ele só come, se a comida lhe cheirar, caso contrário, manda comer aos outros.)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.