2017-01-16 3 views
0

数字を単語に変換しようとしているときにも数字を入力しながらここで私は単語を入力し、私は画面に入力中に表示されますが、次の文字を押した後に表示される文字を押すといくつかの問題を抱えています。それはハイテク 'を示している彼を入力し、「何をここで行うにしても、コード私は数字を単語に変換するだけでなく、それらもまた、JavaScriptとhtmlの単語を表示しようとしている上にそれらを表示しています

<html> 
    <head> 
     <title>HTML - Convert numbers to words using JavaScript</title> 
     <script src="numtoword.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <h1> 
     HTML - Convert numbers to words using JavaScript 
     </h1> 
     <input id="Text1" type="text" onkeydown="onlywords();" onkeyup="NumToWord(this.value,'divDisplayWords');" 
     maxlength="9" /> 
     <br /> 
     <br /> 
     <div id="divDisplayWords" style="font-size: 13; color: Teal; font-family: Arial;"> 
     </div> 
     <script> 
     function onlywords(){ 
      var x = document.getElementById("Text1").value; 
      document.getElementById("divDisplayWords").innerHTML = x; 
     } 
     </script> 
    </body> 
</html> 

javscriptファイルです

function NumToWord(inputNumber, outputControl) { 

    if (inputNumber > 48 || inputNumber < 57) { 

     var str = new String(inputNumber) 
     var splt = str.split(""); 
     var rev = splt.reverse(); 
     var once = ['Zero', ' One', ' Two', ' Three', ' Four', ' Five', ' Six', ' Seven', ' Eight', ' Nine']; 
     var twos = ['Ten', ' Eleven', ' Twelve', ' Thirteen', ' Fourteen', ' Fifteen', ' Sixteen', ' Seventeen', ' Eighteen', ' Nineteen']; 
     var tens = ['', 'Ten', ' Twenty', ' Thirty', ' Forty', ' Fifty', ' Sixty', ' Seventy', ' Eighty', ' Ninety']; 

     numLength = rev.length; 
     var word = new Array(); 
     var j = 0; 

     for (i = 0; i < numLength; i++) { 
      switch (i) { 

       case 0: 
        if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
         word[j] = ''; 
        } else { 
         word[j] = '' + once[rev[i]]; 
        } 
        word[j] = word[j]; 
        break; 

       case 1: 
        aboveTens(); 
        break; 

       case 2: 
        if (rev[i] == 0) { 
         word[j] = ''; 
        } else if ((rev[i - 1] == 0) || (rev[i - 2] == 0)) { 
         word[j] = once[rev[i]] + " Hundred "; 
        } else { 
         word[j] = once[rev[i]] + " Hundred and"; 
        } 
        break; 

       case 3: 
        if (rev[i] == 0 || rev[i + 1] == 1) { 
         word[j] = ''; 
        } else { 
         word[j] = once[rev[i]]; 
        } 
        if ((rev[i + 1] != 0) || (rev[i] > 0)) { 
         word[j] = word[j] + " Thousand"; 
        } 
        break; 


       case 4: 
        aboveTens(); 
        break; 

       case 5: 
        if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
         word[j] = ''; 
        } else { 
         word[j] = once[rev[i]]; 
        } 
        if (rev[i + 1] !== '0' || rev[i] > '0') { 
         word[j] = word[j] + " Lakh"; 
        } 

        break; 

       case 6: 
        aboveTens(); 
        break; 

       case 7: 
        if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
         word[j] = ''; 
        } else { 
         word[j] = once[rev[i]]; 
        } 
        if (rev[i + 1] !== '0' || rev[i] > '0') { 
         word[j] = word[j] + " Crore"; 
        } 
        break; 

       case 8: 
        aboveTens(); 
        break; 

        //   This is optional. 

        //   case 9: 
        //    if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
        //     word[j] = ''; 
        //    } 
        //    else { 
        //     word[j] = once[rev[i]]; 
        //    } 
        //    if (rev[i + 1] !== '0' || rev[i] > '0') { 
        //     word[j] = word[j] + " Arab"; 
        //    } 
        //    break; 

        //   case 10: 
        //    aboveTens(); 
        //    break; 

       default: 
        break; 
      } 
      j++; 
     } 

     function aboveTens() { 
      if (rev[i] == 0) { 
       word[j] = ''; 
      } else if (rev[i] == 1) { 
       word[j] = twos[rev[i - 1]]; 
      } else { 
       word[j] = tens[rev[i]]; 
      } 
     } 

     //word.reverse(); 
     var finalOutput = ''; 
     for (i = 0; i < numLength; i++) { 
      finalOutput = finalOutput + word[i]; 
     } 
     document.getElementById(outputControl).innerHTML = finalOutput; 
    } 
} 
+0

https://jsbin.com/qorufenipi/edit?html,js,output – crowchirp

+0

お世話になりましたが、私のコード全体を変更しました@crai –

+0

これを見たいかもしれませんhttp://stackoverflow.com/questions/ 14766951/convert-digits-into-javascript –

答えて

0

これは簡単です。 onkeydown="onlywords()"からonkeyup="onlywords()"に変更してください。ここで働いてスニペットです:

function NumToWord(inputNumber,outputControl) { 
 

 
if(inputNumber>48 ||inputNumber<57){ 
 

 
    var str = new String(inputNumber) 
 
    var splt = str.split(""); 
 
    var rev = splt.reverse(); 
 
    var once = ['Zero', ' One', ' Two', ' Three', ' Four', ' Five', ' Six', ' Seven', ' Eight', ' Nine']; 
 
    var twos = ['Ten', ' Eleven', ' Twelve', ' Thirteen', ' Fourteen', ' Fifteen', ' Sixteen', ' Seventeen', ' Eighteen', ' Nineteen']; 
 
    var tens = ['', 'Ten', ' Twenty', ' Thirty', ' Forty', ' Fifty', ' Sixty', ' Seventy', ' Eighty', ' Ninety']; 
 

 
    numLength = rev.length; 
 
    var word = new Array(); 
 
    var j = 0; 
 

 
    for (i = 0; i < numLength; i++) { 
 
     switch (i) { 
 

 
      case 0: 
 
       if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
 
        word[j] = ''; 
 
       } 
 
       else { 
 
        word[j] = '' + once[rev[i]]; 
 
       } 
 
       word[j] = word[j]; 
 
       break; 
 

 
      case 1: 
 
       aboveTens(); 
 
       break; 
 

 
      case 2: 
 
       if (rev[i] == 0) { 
 
        word[j] = ''; 
 
       } 
 
       else if ((rev[i - 1] == 0) || (rev[i - 2] == 0)) { 
 
        word[j] = once[rev[i]] + " Hundred "; 
 
       } 
 
       else { 
 
        word[j] = once[rev[i]] + " Hundred and"; 
 
       } 
 
       break; 
 

 
      case 3: 
 
       if (rev[i] == 0 || rev[i + 1] == 1) { 
 
        word[j] = ''; 
 
       } 
 
       else { 
 
        word[j] = once[rev[i]]; 
 
       } 
 
       if ((rev[i + 1] != 0) || (rev[i] > 0)) { 
 
        word[j] = word[j] + " Thousand"; 
 
       } 
 
       break; 
 

 

 
      case 4: 
 
       aboveTens(); 
 
       break; 
 

 
      case 5: 
 
       if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
 
        word[j] = ''; 
 
       } 
 
       else { 
 
        word[j] = once[rev[i]]; 
 
       } 
 
       if (rev[i + 1] !== '0' || rev[i] > '0') { 
 
        word[j] = word[j] + " Lakh"; 
 
       } 
 

 
       break; 
 

 
      case 6: 
 
       aboveTens(); 
 
       break; 
 

 
      case 7: 
 
       if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
 
        word[j] = ''; 
 
       } 
 
       else { 
 
        word[j] = once[rev[i]]; 
 
       } 
 
       if (rev[i + 1] !== '0' || rev[i] > '0') { 
 
        word[j] = word[j] + " Crore"; 
 
       }     
 
       break; 
 

 
      case 8: 
 
       aboveTens(); 
 
       break; 
 

 
      //   This is optional. 
 

 
      //   case 9: 
 
      //    if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
 
      //     word[j] = ''; 
 
      //    } 
 
      //    else { 
 
      //     word[j] = once[rev[i]]; 
 
      //    } 
 
      //    if (rev[i + 1] !== '0' || rev[i] > '0') { 
 
      //     word[j] = word[j] + " Arab"; 
 
      //    } 
 
      //    break; 
 

 
      //   case 10: 
 
      //    aboveTens(); 
 
      //    break; 
 

 
      default: break; 
 
     } 
 
     j++; 
 
    } 
 

 
    function aboveTens() { 
 
     if (rev[i] == 0) 
 
      { 
 
       word[j] = ''; 
 
      } 
 

 
     else if (rev[i] == 1) 
 
      { 
 
      word[j] = twos[rev[i - 1]]; 
 
     } 
 
     else 
 
      { 
 
       word[j] = tens[rev[i]]; 
 
      } 
 
    } 
 

 
    //word.reverse(); 
 
    var finalOutput = ''; 
 
    for (i = 0; i < numLength; i++) { 
 
     finalOutput = finalOutput + word[i]; 
 
    } 
 
    document.getElementById(outputControl).innerHTML = finalOutput; 
 
    }
<html> 
 
    <head> 
 
     <title>HTML - Convert numbers to words using JavaScript</title> 
 
     <script src="numtoword.js" type="text/javascript"></script> 
 
    </head> 
 
    <body> 
 
     <h1> 
 
     HTML - Convert numbers to words using JavaScript 
 
     </h1> 
 
     <input id="Text1" type="text" onkeyup="onlywords();" onkeyup="NumToWord(this.value,'divDisplayWords');" 
 
     maxlength="9" /> 
 
     <br /> 
 
     <br /> 
 
     <div id="divDisplayWords" style="font-size: 13; color: Teal; font-family: Arial;"> 
 
     </div> 
 
     <script> 
 
     function onlywords(){ 
 
      var x = document.getElementById("Text1").value; 
 
      document.getElementById("divDisplayWords").innerHTML = x; 
 
     } 
 
     </script> 
 
    </body> 
 
</html>

+0

数字の変換は表示されません –

0

あなたが得ようとしている値のためのいくつかのチェックが必要になる場合があります。私はおそらく最初にキーチェックを追加します。

これは、ユーザーがキャレットの位置を変更し、既に入力されている前に次の番号を入力した場合に値を認識するためです。 (例えばOLDVALUE = 1、newValueに= 21)私はキー操作でトリガー自分のディレクティブでこの種のものを使用

、あまりにもあなたの場合には役に立つかもしれない:

var keyCode = (evt.which) ? evt.which : event.keyCode; 
var char = String.fromCharCode(keyCode); 
var oldValue = elem[0].value; 
var position = elem.context.selectionStart; 
var newValue = [oldValue.slice(0, position), char, oldValue.slice(position)].join(''); 

あなたnewValueが起こっている。この方法ユーザーが入力フィールドに入力した正確な値を反映します。

0

次の文字が入力されるまで表示されないのは、キーダウン時にフィールドに以前の文字のみが含まれているからです(最初のキーダウン時には空です)。キーアップ時にのみ、キーがフィールドに追加されました。

onkeyup="onlywords()"のその他の回答は正しいですが、onkeyup()が呼び出されるため、要素にはonkeyup()が2つあるべきではありません。だから、これは少し厄介ですので、私はあなたがNumToWord関数内onlywords()ロジックを持っており、有効なテキストを変換するために、見つからなかった場合は、デフォルトとしてテキストを設定することをお勧めonkeydown="onlywords(); NumToWord(this.value,'divDisplayWords');"

しかしのように2つのonkeyup()イベントをconcatinate 。

+0

これは私がやってみようとしているオプションです入力されたテキストが数字か単語かどうかを確認できるケースを追加できれば –

0

ここでは番号変換のコードを完成しました。

最初は、今そこに第二は、この数が変換されただけでなく、テキストがあったように私の仕事が終わってしまったjavscript部分numtoword.js

function NumToWord(inputNumber,outputControl) { 

if(inputNumber>45 || inputNumber<57){ 
    var str = new String(inputNumber); 
    var splt = str.split(""); 
    var rev = splt.reverse(); 
    var once = ['Zero', ' One', ' Two', ' Three', ' Four', ' Five', ' Six', ' Seven', ' Eight', ' Nine']; 
    var twos = ['Ten', ' Eleven', ' Twelve', ' Thirteen', ' Fourteen', ' Fifteen', ' Sixteen', ' Seventeen', ' Eighteen', ' Nineteen']; 
    var tens = ['', 'Ten', ' Twenty', ' Thirty', ' Forty', ' Fifty', ' Sixty', ' Seventy', ' Eighty', ' Ninety']; 

    numLength = rev.length; 
    var word = new Array(); 
    var j = 0; 

    for (i = 0; i < numLength; i++) { 
     switch (i) { 

      case 0: 
       if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
        word[j] = ''; 
       } 
       else { 
        word[j] = '' + once[rev[i]]; 
       } 
       word[j] = word[j] ; 
       break; 

      case 1: 
       aboveTens(); 
       break; 

      case 2: 
       if (rev[i] == 0) { 
        word[j] = ''; 
       } 
       else if ((rev[i - 1] == 0) || (rev[i - 2] == 0)) { 
        word[j] = once[rev[i]] + " Hundred "; 
       } 
       else { 
        word[j] = once[rev[i]] + " Hundred and"; 
       } 
       break; 

      case 3: 
       if (rev[i] == 0 || rev[i + 1] == 1) { 
        word[j] = ''; 
       } 
       else { 
        word[j] = once[rev[i]]; 
       } 
       if ((rev[i + 1] != 0) || (rev[i] > 0)) { 
        word[j] = word[j] + " Thousand"; 
       } 
       break; 


      case 4: 
       aboveTens(); 
       break; 

      case 5: 
       if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
        word[j] = ''; 
       } 
       else { 
        word[j] = once[rev[i]]; 
       } 
       if (rev[i + 1] !== '0' || rev[i] > '0') { 
        word[j] = word[j] + " Lakh"; 
       } 

       break; 

      case 6: 
       aboveTens(); 
       break; 

      case 7: 
       if ((rev[i] == 0) || (rev[i + 1] == 1)) { 
        word[j] = ''; 
       } 
       else { 
        word[j] = once[rev[i]]; 
       } 
       if (rev[i + 1] !== '0' || rev[i] > '0') { 
        word[j] = word[j] + " Crore"; 
       }     
       break; 

      case 8: 
       aboveTens(); 
       break; 


      default: break; 
     } 
     j++; 
    } 

    function aboveTens() { 
     if (rev[i] == 0) 
      { 
       word[j] = ''; 
      } 

     else if (rev[i] == 1) 
      { 
      word[j] = twos[rev[i - 1]]; 
     } 
     else 
      { 
       word[j] = tens[rev[i]]; 
      } 
    } 

    word.reverse(); 
    var finalOutput = ''; 
    for (i = 0; i < numLength; i++) { 
     finalOutput = finalOutput + word[i]; 
    } 
    document.getElementById(outputControl).innerHTML = finalOutput; 
    } 
else if(inputNumber>65 || inputNumber<90){ 
    var x= document.getElementById('Text1').value; 
    document.getElementById(outputControl).innerHTML =x; 
} 



} 

あるHTML部分

<html> 
<head> 
    <title>HTML - Convert numbers to words using JavaScript</title> 

    <script src="numtoword.js" type="text/javascript"></script> 
</head> 

<body> 

    <h1> 

     HTML - Convert numbers to words using JavaScript</h1> 

    <input id="Text1" type="text" onkeydown="onlywords();" onkeyup="NumToWord(this.value,'divDisplayWords');" 

     maxlength="9" /> 

    <br /> 

    <br /> 

    <div id="divDisplayWords" style="font-size: 13; color: Teal; font-family: Arial;"> 

    </div> 
<script> 
function onlywords(){ 
var x = document.getElementById("Text1").value; 
    document.getElementById("divDisplayWords").innerHTML = x; 
} 
</script> 

</body> 

</html> 

です働いている。

関連する問題