Я преобразую числа в слова, а также показывая их на экране также пытается показать слово в javascript и html

Я пытаюсь преобразовать число в слово, также показывая их при вводе числа, то же самое со словом, где я вводил Слово и его показать, пока я печатаю на экране, но возникли некоторые проблемы, как после нажатия символа он показывает после нажатия следующего символа, как «если это я пишу «Привет», то он будет показывать только » h «сначала, то, когда я печатаю его, он показывает «привет «» что делать здесь код

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

4 ответа

  1. Это просто. Просто измените 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>

  2. Возможно, Вам потребуется проверить значение, которое вы собираетесь получить. Я, вероятно, добавлю сначала проверку ключа.

    Вам это нужно, потому что вы будете код распознать значение, если пользователь изменяет позицию каре и введите следующий номер перед уже введенным? (например, 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 будет отражать точное значение, введенное пользователем в поле ввода.

  3. Причина, по которой он не отображается, пока не будет набран следующий символ, заключается в том, что на keydown поле имеет только предыдущие символы в поле(пусто на первом keydown). Только на keyup ключ добавлен в поле.

    Таким образом, другие ответы onkeyup="onlywords()"правильны, но вы не должны иметь два onkeyup()элемента в элементе, так как onkeyup()будет вызываться только предыдущий. Так что просто сцепить два onkeyup()события, как onkeydown="onlywords(); NumToWord(this.value,'divDisplayWords');"

    Но так как это немного беспорядочно, я предлагаю вам иметь onlywords()логику внутри NumToWordфункции и установить текст по умолчанию, если допустимый текст не был найден для преобразования.

  4. Здесь я завершил код для преобразования номера.

    во-первых, часть 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 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; 
    }
    
    
    
    }
    

    это сделало мою работу, так как номер конвертировался, а также текст работал .