Jump to content

Problema em simular um click com javascript/ jquery


ResoDUTE
 Share

Recommended Posts

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

Link to comment
Share on other sites

$(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.

Link to comment
Share on other sites

É 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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

// 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:

http://h.imagehost.org/0406/jserro.png

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
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
 Share

×
×
  • Create New...

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.