2010-11-22 3 views
0

J'ai plusieurs formulaires sur mon blog. Pour chaque formulaire, j'ai ajouté un bouton de conversion pour convertir le texte dans textarea avant de soumettre le bouton. Donc, il y a 3 emplois - obtenir de la valeur, calculer le texte, remplacer l'ancien texte par un nouveau texte. Dans le code html bouton, j'ai essayé 2 façons, ni fonctionne:Remplacer le texte par un nouveau texte calculé par onclick = "myfunction()"

<a onclick="myfunction()" class="button" href="javascript:void(0)">Convert</a>` 

et

<a onclick="check('document.getElementsByTagName('textarea')[0].value','myfunction()')" 
    class="button" href="javascript:void(0)">Convert</a>` 

Dans le fichier de externe, j'ai cette fonction pour calculer le texte:

myfunction(){ 
oldtext = document.getElementsByTagName('textarea')[0].value; 
...calculating... 
newtext= the result of calculation; 
document.getElementsByTagName('textarea')[0].value = newtext; 
} 

I Je ne sais pas si le problème est dans le bouton ou dans le myfunction(). S'il vous plaît aider!

+0

'valeur' est solide dans tous les navigateurs. Nous devons voir plus de code. –

+0

il semble fonctionner ok: [jsfiddle.net] (http://jsfiddle.net/thecheesewheel/2Ch9e/15/) pouvez-vous dire ce que vous attendez de faire? –

Répondre

0

utilisation innerHTML au lieu de la valeur

oldtext = document.getElementsByTagName('textarea')[0].value; 

à

oldtext = document.getElementsByTagName('textarea')[0].innerHTML; 

Merci.

+0

Non non non. 'value' est toujours la propriété correcte. 'innerHTML' ne fonctionnera pas une fois que l'utilisateur aura modifié la valeur de la zone de texte. –

+0

Merci! Je l'ai changé pour innerHTML, ne fonctionne toujours pas. D'autres façons? – Jenny

+0

Peut-être, à la fin de myfunction(), je devrais ajouter une ligne de "write" ou quelque chose comme ça? – Jenny

1

C'est la fonction pour calculer le texte. Peut-être qu'il manque quelque chose entre la fonction et le bouton?

var vowels = new Array ("a","e","i","o","u","v","ü"); 
var umlatu = "ü"; 
var tones = new Array ("a","e","i","o","u","u","á","é","í","ó","ú","u","a", "e", "i", "o", "u", "u","à","è","ì","ò","ù","u"); 


function myfunction() { 

textin = document.getElementsByTagName('textarea')[0].value; 
textin.toLowerCase(); 

currentword = ""; 
currentchar = ""; 
i = 0; 
numletters = textin.length; 
textout = ""; // final output 
tempword = ""; 
usevowel = 1; // which vowel will have the tone over it 
foundvowel = 0; 

for (i=0; i<=numletters; i++) { 
currentchar = textin.charAt (i); 
currentnumvalue = currentchar - 1; 

// numbers 1-5 are tone marks, build the word until we hit one 
if (!(currentchar.match(/[1-5]/))) { 
if (currentchar.match(/[aeiouvü]/)) foundvowel++; 
// if the last character was a vowel and this isn't... 
if (((foundvowel != 0)) && (currentchar.match(/[^aeiouvüngr]/)) || (currentchar == "")) { 
textout = textout + currentword; 
currentword = currentchar; 
} 

else { 
currentword = currentword + currentchar; 
} 
}// if !match 1-5 
// the character must be a tone mark 
else { 

tempword=""; // the word being built in this loop 
foundvowel = 0; // number of vowels found in the word 
usevowel = 1; // which vowel (1st or 2nd) will get the tone mark 

// step through each character in word 
wordlen = currentword.length; 
// If it doesn't have letters, just output it 
if (!(currentword.match(/[a-zü]/))) { 
    textout = textout + currentword + currentchar; 
    currentword = ""; 
} 
// the tone goes over the second vowel for these combinations 
if (currentword.match(/i[aeou]/)) usevowel = 2; 
if (currentword.match(/u[aeio]/)) usevowel = 2; 
if (currentword.match(/[vü]e/)) usevowel = 2; 

// We'll check either the first or the first two vowels, depending on which should have the tone 
for (j=0; (j<=wordlen) && (foundvowel<usevowel); j++) { 
// Check to see if the character is a vowel 
for (vowelnum=0; vowelnum<7; vowelnum++) { 

if (currentword.charAt (j) == vowels [ vowelnum ]) { 
// It's a vowel - convert to corresponding numbered tone character from tones array 
// If tone is 5th (Neutral tone) - Leave it as the normal vowel 

if (currentnumvalue<=3) { 
if (vowelnum == 6) currentchar = tones [5 + (currentnumvalue *6)]; // Handle the damned ü for Europeans who can input it directly 
else currentchar = tones [ vowelnum + (currentnumvalue * 6)]; 
} 

else { 
if (vowelnum == 5) currentchar = umlatu; //neutral tone umlat 
else currentchar = vowels [ vowelnum ]; //all other neutral tones 
} 

foundvowel++; // Increment the counter for vowels found in the word 

if (foundvowel>=usevowel) { 
// rebuild word with the tone if this vowel should have the tone 

tempword=""; 
for (k=0; k<=wordlen; k++) { 
if (k == j) { 
tempword = tempword + currentchar; 
} 

else { //just copy from the input, but turn all remaining v's into umlated u's 
if (currentword.charAt(k) == vowels[5]) tempword = tempword + umlatu; 
else tempword = tempword + currentword.charAt(k); 
} 
} 
currentword=""; 
} 
} 
} 
textout = textout + tempword; 
} // else -deal with numbers 

} 
} 

// rough check 
if (textout=="") alert ('That was not valid input\nCheck http://www.romanization.com to learn about pinyin'); 
else { 
document.getElementsByTagName('textarea')[0].value = textout; 
} 
} 
+0

@Tim Down: Merci de votre aide! Pourriez-vous nous aider à vérifier le code? – Jenny

Questions connexes