2017-05-09 90 views
1

在以下程序中,出于某种原因,for循环只运行一次,然后不再重复。我相信错误是用粗体代码。非常感谢帮助。这是一个用于将文本框更改为大写字母,标题大小写等的程序。标题大小写是每个大写字母的首字母大写。谢谢。For Loop仅运行一次

<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 (/ \ w \ S */g,function(txt){return txt.charAt(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("") 
}