Uncaught TypeError: x.replace не является функцией. Не получил до этого изменения - PullRequest
0 голосов
/ 10 января 2020

Я использую следующие строки для изменения значения некоторых переменных, взятых из пользовательского ввода. Это позволяет мне изменить , на . (необходимо для операций с плавающей запятой).

va, vcc и consumo - переменные.

consumo = consumo.replace(",",".");
va = va.replace(",",".");
vcc = vcc.replace(",",".");

Тогда я решил сделать функцию для сохранения кодов строк, поэтому я создал это:

function comaAPunto(n1,n2,n3){
   n1 = n1.replace(",",".");
   n2 = n2.replace(",",".");
   n3 = n3.replace(",",".");    
}

И код теперь выглядит как comaAPunto(consumo,va,vcc);

Но теперь я получил эту ошибку, когда Я запускаю код.

Uncaught TypeError: n1.replace не является функцией

Знаете почему? Когда внутри функции не работает, но вне ее, она работает.

Как запрос, я отправляю полный код:


<script>
    $(document).ready(function(){


        var vcc;
        var va;
        var consumo;
        var r1;
        var r2;
        $('#calcular').click(calcularvalores);
        /*Para seleccionar todos los text box*/

        function seleccionar(){
            this.select();
        }


        $('#consumo').click(seleccionar); //Select all text
        $('#vcc').click(seleccionar);
        $('#a').click(seleccionar);
        $('#consumo').keyup(calcularvalores); // WHen user change value
        $('#vcc').keyup(calcularvalores);
        $('#a').keyup(calcularvalores);


        function getvalores(){ //Take what user types
        vcc = document.getElementById("vcc").value;
        va = document.getElementById("a").value;
        consumo = document.getElementById("consumo").value;
        }

        function valores(){ // Parse it to float
        vcc = parseFloat(vcc);
        va = parseFloat(va);
        consumo = parseFloat(consumo);
        }
        function verificar(checkthis){ //Check if stil NaN
            if (isNaN(checkthis)){
                return false;
            } else{ 
                return true;
            }
        }
        function comaAPunto(t1,t2,t3){ // Change , to .
            t1 = t1.replace(",",".");
            t2 = t2.replace(",",".");
            t3 = t3.replace(",",".");


        }

        function calcularvalores(){
            getvalores(); // Get user input

            comaAPunto(va,vcc,consumo); // <-- Error here tryng to change "," to "."

            valores(); // Parsing values to float.
            /* Ecuations implemented */
            consumo = consumo/1000; //Lo convertimos en mA.
            r2 = va/consumo;
            r1 = (vcc-va)/consumo;
            /* FInish ecuations */
            var isok = verificar(va); //Look if user didnt leave it blank or with text inside it.
            if(isok){
            var isreally = verificar(consumo); //Look if fill blank another space.
            if(isreally){
            $('#r11').html("<p>"+r1+"</p>"); //Print values if okay
            $('#r22').html("<p>"+r2+"</p>");
        } else{
            $('#r11').html("<p>Ingresa corriente</p>");
            $('#r22').html("<p>Ingresa corriente</p>");
        }
        } else{
            $('#r11').html("<p>Calculando</p>");
            $('#r22').html("<p>Calculando</p>");
        }
        }
        });
    </script>

1 Ответ

0 голосов
/ 10 января 2020

Вы должны прекратить вызывать функцию calcularvalores при каждом событии keyup. При этом вы вызываете функцию до того, как все три поля ввода имеют значения, поэтому пустая строка '' будет передана из других полей ввода.

РЕДАКТИРОВАТЬ: В случае, если вам нужно использовать событие keyup в полях ввода, убедитесь, что все поля имеют допустимое значение перед выполнением функции. Я добавил if(consumo.length === 0 || vcc.length === 0 || va.length === 0) return; для этой цели.

<script>

    $(document).ready(function(){


        var vcc;
        var va;
        var consumo;
        var r1;
        var r2;
        $('#calcular').click(calcularvalores);
        /*Para seleccionar todos los text box*/

        function seleccionar(){
            this.select();
        }


        $('#consumo').click(seleccionar); //Select all text
        $('#vcc').click(seleccionar);
        $('#a').click(seleccionar);
        $('#consumo').keyup(calcularvalores); // WHen user change value
        $('#vcc').keyup(calcularvalores);
        $('#a').keyup(calcularvalores);


        function getvalores(){ //Take what user types
            vcc = document.getElementById("vcc").value;
            va = document.getElementById("a").value;
            consumo = document.getElementById("consumo").value;
        }

        function valores(){ // Parse it to float
            vcc = parseFloat(vcc);
            va = parseFloat(va);
            consumo = parseFloat(consumo);
        }
        function verificar(checkthis){ //Check if stil NaN
            if (isNaN(checkthis)){
                return false;
            } else{ 
                return true;
            }
        }
        function comaAPunto(t1,t2,t3){ // Change , to .
            t1 = t1.toString().replace(",",".");
            t2 = t2.toString().replace(",",".");
            t3 = t3.toString().replace(",",".");


        }

        function calcularvalores(){
            getvalores(); // Get user input

            if(consumo.length === 0 || vcc.length === 0 || va.length === 0)   return;

            comaAPunto(va,vcc,consumo); // <-- Error here tryng to change "," to "."

            valores(); // Parsing values to float.
            /* Ecuations implemented */
            consumo = consumo/1000; //Lo convertimos en mA.
            r2 = va/consumo;
            r1 = (vcc-va)/consumo;
            /* FInish ecuations */
            var isok = verificar(va); //Look if user didnt leave it blank or with text inside it.
            if(isok){
              var isreally = verificar(consumo); //Look if fill blank another space.
              if(isreally){
                $('#r11').html("<p>"+r1+"</p>"); //Print values if okay
                $('#r22').html("<p>"+r2+"</p>");
              } 
              else{
                  $('#r11').html("<p>Ingresa corriente</p>");
                  $('#r22').html("<p>Ingresa corriente</p>");
              }
            } 
            else{
                $('#r11').html("<p>Calculando</p>");
                $('#r22').html("<p>Calculando</p>");
            }
        }
        });

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...