开发者

Replace text with calculated new text by onclick="myfunction()"

开发者 https://www.devze.com 2023-01-26 21:08 出处:网络
I have multi forms on my blog. For each form, I added a convert button to convert text in textarea before submit button. So, there are 3 jobs-- get value, calculate text, replace old text with new tex

I have multi forms on my blog. For each form, I added a convert button to convert text in textarea before submit button. So, there are 3 jobs-- get value, calculate text, replace old text with new text. In the button html, I tried 2 ways, neither works:

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

and

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

In external js file, I have this function to calculate text:

myfunction(){
开发者_开发知识库oldtext = document.getElementsByTagName('textarea')[0].value;
...calculating...
newtext= the result of calculation;
document.getElementsByTagName('textarea')[0].value = newtext;
}

I don't know the problem is in the button or in the myfunction(). Please help!


This is the function to calculate the text. Maybe something missing between the function and the button?

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;
}
}


use innerHTML instead of value

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

to

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

Thanks.

0

精彩评论

暂无评论...
验证码 换一张
取 消