代码正在跳转到一个未调用的函数

时间:2019-09-24 09:11:44

标签: javascript function

我有此代码,可以在其中填写不同金额的订单。我可以创建更多输入以创建更多金额来计算它们。但是由于某种原因,当我按其中一个输入以创建另一个输入/输入时,它进入了“重置”功能,该功能会擦除每个字段。不应在按键时调用重置功能。<​​/ p>

var intId = 0;
var maindiv = $("#maindiv");
var divpeso ="";
var inputnumber ="";
var fieldname = "";
var removeButton = "";


function anadir_input() {
    // var lastField = $("#container div:last");
    intId = intId + 1;
    divpeso = $("<div class=\"input-group mb-3\" id=\"divpeso" + intId + "\"/>");

    inputnumber = $("<input id=\"peso" + intId + "\" type=\"number\" class=\"form-control\" name=\"peso" + intId + "\" maxlength=\"5\" size=\"5\" step=\".01\" />");
    fieldname = $("<div class=\"input-group-append\"><span class=\"input-group-text\">Peso" + intId + "</span></div>");
    removeButton = $("<input type=\"button\" class=\"btn btn-outline-danger\" value=\"Quitar\" />");

    removeButton.click(function () {
        $(this).parent().remove();
    });
    inputnumber.keypress(function (e) {
           if (e.which == 13) {
           console.log("enter apretado");
        }
    });

    divpeso.append(inputnumber);
    divpeso.append(fieldname);
    divpeso.append(removeButton);
    $("#container").append(divpeso);
};

$(document).ready(function () {

    $("#anadir").click(function () {
        anadir_input();
    });

    $("#reset").click(function () {
        console.log("reset");
        $('[id*=divresultado]:visible').each(function () {
            $(this).remove();
        });
        $('[id^=peso]:visible').each(function () {
            $(this).val('');
        });
        $('[id^=divpeso]:visible').each(function () {
            $(this).remove();
        });
        intId = 0;
    });


    $("#resultado").click(function () {
        var pesosordenados = [];
        var capacidad = Number($("#capacidad").val());
        var pesos = [];
        capacidad = $("#capacidad").val();
        $('[id*=divresultado]:visible').each(function () {
            $(this).remove();
        });
        $('[id^=peso]:visible').each(function () {
            if ($(this).val() != 0 || $(this).val() != null || $(this).val() != undefined)
                pesos.push($(this).val());
            pesosordenados = pesos.sort(function (a, b) {
                return b - a
            });
        });

        var contenedores = [];
        var sobrepesos = [];

        //algoritmo para rellenar los contenedores con los distintos pesos.
        while (pesosordenados.length > 0) {
            var unidadcontenedor = [];
            var pesosnousados = [];
            var restcapacidad = Number(capacidad);
            for (var i = 0; i < pesosordenados.length; i++) {
                if (Number(pesosordenados[i]) > capacidad) { //si el peso es mas grande que la capacidad del contenedor
                    sobrepesos.push(Number(pesosordenados[i]));
                } else {
                    if (Number(pesosordenados[i]) <= restcapacidad && restcapacidad >= pesosordenados[pesosordenados.length - 1]) {
                        unidadcontenedor.push(Number(pesosordenados[i]));
                        restcapacidad = restcapacidad - Number(pesosordenados[i]);
                    } else {
                        pesosnousados.push(pesosordenados[i]);
                    }
                }

            }
            contenedores.push(unidadcontenedor);
            pesosordenados = pesosnousados;
        }


        for (var m = 0; m < contenedores.length; m++) {
            var divresultado = $("<div id=\"divresultado\" class=\"calculadora\"></div>");
            var titulo = $("<h5 class=\"card-title\">Contenedor " + (Number(m) + 1) + "</h5>");
            var contpesorelleno = $("<h5 class=\"card-title\">Peso cargado: " + contenedores[m].reduce((a, n) => (a + Number(n)), 0) + "</h5>");
            var contpesolibre = $("<h5 class=\"card-title\">Peso libre: " + (Number(capacidad) - Number(contenedores[m].reduce((a, n) => (a + Number(n)), 0))) + "</h5>");

            divresultado.append(titulo);
            divresultado.append(contpesorelleno);
            divresultado.append(contpesolibre);
            for (var n = 0; n < contenedores[m].length; n++) {
                var resultfield = $("<div class=\"input-group-append\"><span class=\"input-group-text\">" + contenedores[m][n] + "</span></div>");
                divresultado.append(resultfield);
            }
            maindiv.append(divresultado);
        }


//para sumar toda una array: arrayloquesea.reduce((a, n) => (a + Number(n)), 0)


    });


});

您有JSFiddle here

复制步骤:

-按下绿色按钮“Añadirpeso”。

-单击创建的输入字段,然后按Enter。

创建了另一个输入字段,但还具有重置功能,将其全部删除。

编辑:

我用html中的 type =“ reset” 和js的keypress函数中的 e.preventDefault(); 解决了这个问题。但是,它不会显示带有结果的div maindiv.append(divresultado);

2 个答案:

答案 0 :(得分:0)

否,这不是在重置,您没有在开始时提供输入值,您的js $("#anadir").click()函数应如下所示:

$("#anadir").click(function () {
     anadir_input($('input[name="capacidad"]').val());
});

anadir_input函数应放置传递的输入值:

function anadir_input(inputValue) {
    // var lastField = $("#container div:last");
    intId = intId + 1;
    divpeso = $("<div class=\"input-group mb-3\" id=\"divpeso" + intId + "\"/>");

    inputnumber = $("<input id=\"peso" + intId + "\" type=\"number\" class=\"form-control\" name=\"peso" + intId + "\" maxlength=\"5\" size=\"5\" step=\".01\" value='"+inputValue+"' />");
    fieldname = $("<div class=\"input-group-append\"><span class=\"input-group-text\">Peso" + intId + "</span></div>");
    removeButton = $("<input type=\"button\" class=\"btn btn-outline-danger\" value=\"Quitar\" />");

    removeButton.click(function () {
        $(this).parent().remove();
    });
    inputnumber.keypress(function (e) {
           if (e.which == 13) {
           console.log("enter apretado");
        }
    });

    divpeso.append(inputnumber);
    divpeso.append(fieldname);
    divpeso.append(removeButton);
    $("#container").append(divpeso);
};

我更改了您的小提琴以查看输出差异:https://jsfiddle.net/z4sgnr28/

我希望这是有道理的

答案 1 :(得分:0)

一切都很好,只是在重置按钮中缺少type =“ reset”。

  <button type="reset" id="reset" class="btn btn-danger cincuw">Reset</button>