2017-05-09 14 views
1

次のプログラムでは、何らかの理由でforループが1回実行され、その後繰り返されません。私は誤りが大胆なコードであると信じています。ヘルプは非常に感謝しています。これは、テキストボックスを大文字、大文字小文字などに変更するために使用されるプログラムです。大文字小文字は、大文字に変換された各単語の最初の文字です。ありがとうございました。Forループを1回だけ実行する

<html> 
    <head> 
    <script type="text/javascript"> 

    function titlize(){ 
     tLength=tBox.box.value.length 
     character=new Array() 
     for(i=1; i<tLength+1; i++){ 
      **character[i]=tBox.box.value.slice(i-1,i)** 
      document.write(character[i]) 
       if(i==1){ 
       character[i]=character[i].toUpperCase() 
       }else if(character[i-1]==" "){ 
      character[i]=character[i].toUpperCase() 
       }else{ 
      character[i]=character[i].toLowerCase() 
      } 
      document.write(i) 
      document.write(character[i]) 
     } 
    } 

    function upperC(){ 
     toUpperCase(tBox.box.value) 
    } 

    function verify(){ 
     if(tBox.uppercase.checked){ 
     tBox.box.value=tBox.box.value.toUpperCase() 
     } 
     if(tBox.lowercase.checked){ 
     tBox.box.value=tBox.box.value.toLowerCase() 
     } 
     if(tBox.titlecase.checked){ 
     titlize() 
     } 
     if(tBox.uppercase.checked){ 
     tBox.box.value=tBox.box.value.toUpperCase() 
     } 

    } 

    </script> 
    </head> 
    <body> 
    <form name="tBox"> 
    <input type="text" name="box" value=""><br> 
    <input type="checkbox" name="uppercase" onClick=verify(this.form)>Uppercase<br> 
    <input type="checkbox" name="lowercase" onClick=verify(this.form)>Lowercase<br> 
    <input type="checkbox" name="titlecase" onClick=verify(this.form)>Titlecase<br> 
    </form> 
    </body> 
    </html> 
+0

参照:http://stackoverflow.com/questions/196972/convert-string-to-title-case-with-javascript 関数toTitleCase(STR){ 戻りstr.replace (0)。toUpperCase()+ txt.substr(1).toLowerCase();};} } –

答えて

2

tBoxので、それが価値だし、その値の長さが有効ではありません取得しようと、あなたのformなく、あなたのテキストボックスです。それがあるべきように、コードは、あなたのテキストボックスにアクセスする必要がある:あなたが解析されて終了した文書にそれを使用する場合、それが全体の既存の文書が投げ出されることになりますので、

// Scan for the first textbox. Give that textbox a unique id to be 
    // able to write a more specific query. 
    tLength= document.querySelector("input[type='text']").value.length; 

    character=new Array() 

    // Not sure why you were writing: i < tLength +1 as that will 
    // cause your loop to go one character too far. Remember, 
    // arrays start from 0 and length starts from 1. 
    for(i=1; i < tLength; i++){ 

最後に、document.write()を避けます。

0

上記のコードに基づいています。あなたの関数にdocument.writeステートメントがあります。これは、DOMを上書きする際に問題を引き起こしています。私はそれらを削除し、それが正常に機能することができます。また、テキストをテキストボックスに戻すためにtBox.box.value = character.join("")を追加しました。

https://plnkr.co/edit/qOPIxwH16hJUlj0RFBhv?p=preview

function titlize() { 
    tLength=tBox.box.value.length; 
    character=new Array(); 

    for(i=1; i < tLength + 1; i++){ 
     console.log('print') 
     character[i]= tBox.box.value.slice(i - 1,i) 
     //document.write(character[i]) 
      if(i==1) { 
       character[i]=character[i].toUpperCase() 
      } else if(character[i-1]==" ") { 
       character[i] = character[i].toUpperCase() 
      } else { 
       character[i]=character[i].toLowerCase() 
      } 
     console.log(i) 
     console.log(character[i]) 
    } 

    tBox.box.value = character.join("") 
} 
関連する問題