Javascript 未捕获类型错误:x.replace不是函数。在这变化之前我没有得到

Javascript 未捕获类型错误:x.replace不是函数。在这变化之前我没有得到,javascript,jquery,function,typeerror,Javascript,Jquery,Function,Typeerror,我使用以下几行来更改从用户输入中获取的一些变量的值。 这允许我更改,例如。浮动操作所必需的 va、vcc和consumo是变量 consumo = consumo.replace(",","."); va = va.replace(",","."); vcc = vcc.replace(",","."); 然后我决定创建一个函数,用于保存行代码,因此我创建了以下内容: function comaAPunto(n1,n2,n3){ n1 = n1.replace(",",".");

我使用以下几行来更改从用户输入中获取的一些变量的值。 这允许我更改,例如。浮动操作所必需的

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(",",".");    
}
代码现在看起来像 弗吉尼亚州科马普托康苏莫市vcc

但现在,我在运行代码时遇到了这个错误

未捕获类型错误: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>

您应该停止在每个keyup事件上调用calculates函数。这样做是在所有三个输入字段都有值之前调用函数,因此将从其他输入字段传递空字符串

编辑:如果您需要在输入字段上使用keyup事件,请确保在执行函数之前所有字段都具有有效值。我添加了ifconsumo.length==0 | | vcc.length==0 | | va.length==0返回;为此目的

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

听起来你传递到comaAPunto的n1中的任何东西都是空的或未定义的,或者实际上不是字符串。尝试n1.toString.replace?你能发布你的实际代码吗?另外n1=n1.replace。。。不在函数外部设置变量,它只分配给函数的局部变量。这是typescript吗?如果是这样,您需要将参数上的类型定义为字符串。Ie函数comaAPunton1:字符串,n2:字符串,n3:string@Addis更新。谢谢你好,先生,谢谢你的回答和努力。我的目标是页面显示实时变化,所以我发现keyup事件,这样用户就不应该点击任何按钮。这是我创建函数之前的工作代码试着把5、2.5和1放在用户输入字段中,你会看到电阻的值是如何随着空间的变化而变化的。然后,将第二次填充从2.5更改为2.5,您将得到相同的值,因为我将,更改为。在那几行代码中,问题出现了,使它成为一个函数。它没有回来。。。。。。因为我在输入上留下了defalut值。再次感谢。顺便说一句,默认值并不重要,因为它们在任何输入的每个关键点上都被指定。