Caracteres Especiais em JavaScript não exibindo corretamente no site
-
19-09-2019 - |
Pergunta
Meu IE e Chrome navegadores não estão exibindo as frases francesas corretamente quando eu ir de um (função de carregamento) frase em francês a uma frase Inglês (onmousedown função) e de volta para uma frase em francês (onmouseup função). Quando eu deixar-se sobre o mouse de uma frase particular, remonta ao francês, mas os caracteres especiais para O e E (que são ô
e é
) não mudam a partir do código número para o ö e é. Alguém pode me dizer por que está fazendo isso e como posso corrigi-lo?
Aqui está o meu código JavaScript:
/*
Function List:
eventSource(e)
Returns the source of an event in either event model
swapFE(phrase, pnum)
Changes a French phrase to the English version of that phrase.
swapEF(phrase, pnum)
Changes an English phrase ot the Frech version of that phrase.
setUpTranslation()
Insert the current week's french phrases into document and set up
event handlers for the phrases.
*/
//Returns the source of an event in either event model
function eventSource(e) {
var IE = document.attachEvent ? true:false;
var DOM = document.addEventListener ? true: false;
if (IE) return event.srcElement;
else if (DOM) return e.currentTarget;
}
//I added the function below to try and make it cross-browser compatible but it did not work....help!
//function applysetUpTranslation(phrases[i],"click",swapFE(e),false) {
//if (IE) phrases[i].attachEvent("on"+onmousedown, swapFE(e));
//else if (DOM) phrases[i].addEventListener(click,swapFE(e),true);
//}
function setUpTranslation() {
var IE = document.attachEvent ? true:false;
var DOM = document.addEventListener ? true: false;
var phrasesContainer = document.getElementById("phrases");
var phrases= phrasesContainer.getElementsByTagName("p");
for (i = 0; i<phrases.length; i++) {
phrases[i].number = i;
phrases[i].childNodes[1].innerHTML = french[i];
phrases[i].childNodes[1].id = i;
//childNodes[1] is the second span in the <p> array
if (IE) {
phrases[i].childNodes[1].onmousedown = function() { swapFE(event); };
} else {
phrases[i].childNodes[1].onmousedown = swapFE;
}
if (IE) {
phrases[i].childNodes[1].onmouseup = function() { swapEF(event); };
} else {
phrases[i].childNodes[1].onmouseup = swapEF;
}
}
}
//this function changes the French phrase to an English phrase.
function swapFE(e) {
var phrase = eventSource(e);
//phrase.innerText = english[phrase.id];
var parent = phrase.parentNode;
//childNodes[0] is the number of the phrase +1
var idnum = parent.childNodes[0];
//parseInt takes a textstring and extracts it to make a number. Then you will subtract 1 from the number.
var phrasenum = parseInt(idnum.innerHTML)-1;
phrase.innerText = english[phrasenum];
parent.childNodes[1].style.fontStyle= "normal";
parent.childNodes[1].style.color = "rgb(155, 102, 102)";
}
function swapEF(e) {
var phrase = eventSource(e);
//var phrase = e.srcElement;
//phrase.innerText = english[phrase.id];
var parent = phrase.parentNode;
var idnum = parent.childNodes[0];
var phrasenum = parseInt(idnum.innerHTML)-1;
phrase.innerText = french[phrasenum];
parent.childNodes[1].style.fontStyle= "italic";
parent.childNodes[1].style.color= "black";
}
Aqui está o código js com a matriz francesa nele:
var english=new Array();
english[0]="This hotel isn't far from the Eiffel Tower.";
english[1]="What time does the train arrive?";
english[2]="We have been waiting for the bus for one half-hour.";
english[3]="This meal is delicious";
english[4]="What day is she going to arrive?";
english[5]="We have eleven minutes before the train leaves!";
english[6]="Living in a foreign country is a good experience.";
english[7]="Excuse me! I'm late!";
english[8]="Is this taxi free?";
english[9]="Be careful when you go down the steps.";
var french=new Array();
french[0]="Cet hôtel n'est pas loin de la Tour Eiffel.";
french[1]="A quelle heure arrive le train?";
french[2]="Nous attendons l'autobus depuis une demi-heure.";
french[3]="Ce repas est délicieux";
french[4]="Quel jour va-t-elle arriver?";
french[5]="Nous avons onze minutes avant le départ du train!";
french[6]="Habiter dans un pays étranger est une bonne expérience.";
french[7]="Excusez-moi! Je suis en retard!";
french[8]="Est-ce que ce taxi est libre?";
french[9]="Faites attention quand vous descendez l'escalier.";
Muito obrigado por sua ajuda.
Solução
Eu acho que você precisa usar innerHTML
para os caracteres especiais para se interpretado:
phrase.innerHTML = french[phrasenum];
Outras dicas
Se os seus arquivos de código HTML / JavaScript são criados assim que usam Unicode, você deve ser capaz de colocar o ô e personagens E em seu Javascript e HTML sem problemas.