Boas colegas. Estou com um problema que não estou a conseguir solucionar. Bem, estava a seguir um tutorial que gostaria de aplicar no meu projecto na qual explica como criar a funcionalidade de ter duas línguas no website, do tipo mudar de português para inglês e vice-versa. Fui seguindo o video e até traduz sim, mas a função que permite fazer o reload da página dá, o seguinte erro:
Uncaught TypeError: Cannot set property ‘onclick’ of undefined
Abaixo deixo o código:
...
<body>
<a href="#eng" data-reload>English</a>
<a href="#es" data-reload>Espanhol</a>
<p id="hi">
Welcome everyone!
</p>
<script>
// define language reload anchors
var dataReload = document.querySelectorAll("[data-reload]");
var hi = document.querySelector("#hi");
// language translation
var language = {
eng: {
welcome: "Welcome everyone!"
},
es: {
welcome: "Bienvenidos todos!"
}
};
//Define language via window hash
if(window.location.hash){
if(window.location.hash === "#es"){
hi.textContent = language.es.welcome;
}
}
// define language reload onclick iliteration
for (i = 0; i <= dataReload.length; i++) {
dataReload[i].onclick = function() {
window.location.reload(true);
};
}
</script>
</body>
...
O erro aponta para a seguinte linha:
dataReload[i].onclick = function() {
Ou seja apenas é feita a tradução quando faço a atualização da página. E no tutorial essa função supostamente que é que iria fazer. O que devo fazer para poder ultrapassar este problema? Alguma dica? Abaixo deixo o link do video no youtube:
[https://www.youtube.com/watch?v=PaJrDAmrOB4&t=337s]
No for vc tava botando <=
, então ele tava pegando um outro índice null
Testa agora:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>Title</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
</head>
<body>
<a href="#eng" data-reload>English</a>
<a href="#es" data-reload>Espanhol</a>
<p id="hi">
Welcome everyone!
</p>
<script>
// define language reload anchors
var dataReload = document.querySelectorAll("[data-reload]");
var hi = document.querySelector("#hi");
// language translation
var language = {
eng: {
welcome: "Welcome everyone!"
},
es: {
welcome: "Bienvenidos todos!"
}
};
//Define language via window hash
if (window.location.hash) {
if (window.location.hash === "#es") {
hi.textContent = language.es.welcome;
}
}
// define language reload onclick iliteration
for (i = 0; i < dataReload.length; i++) {
console.log(dataReload[i])
dataReload[i].onclick = function () {
reloadPage()
};
}
function reloadPage() {
setTimeout(function () {
location.reload();
}, 100);
}
</script>
</body>
</html>
Obrigado acabei achando a mesma solução em relação à função para realizar o reload…
O código acabou ficando assim:
<script>
// define language reload anchors
var dataReload = document.querySelectorAll("[data-reload]");
var hi = document.querySelector("#hi");
// language translation
var language = {
eng: {
welcome: "Welcome everyone!"
},
es: {
welcome: "Bienvenidos todos!"
}
};
//Define language via window hash
if (window.location.hash) {
if (window.location.hash === "#es") {
hi.textContent = language.es.welcome;
}
}
// define language reload onclick iliteration
for (i = 0; i <= dataReload.length; i++) {
dataReload[i].onclick = function () {
// location.reload();
setTimeout(function () {
location.reload();
}, 100);
};
}
</script>
Mas não entendi a diferença em usar o setTimeout
Acho que ele tava adicionando o hash e atualizando ao mesmo tempo, ou até antes de adicionar o Hash, então o setTimeout faz o sistema esperar 100 milésimos antes de dar o refresh. Aí sim funciona.