Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
ResoDUTE

Problema em simular um click com javascript/ jquery

Recommended Posts

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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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".

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.