文本框值未正确计算

时间:2015-08-14 10:52:33

标签: javascript jquery html5 textbox sum

我使用html和jquery创建了一个表单。它连接到db,它应该在db中输入写在文本框中的值。但我有以下问题。如果特定文本框没有键入值,则应该发出警报,并阻止数据进入db。一切顺利。但同样,我想要一个文本框,如果这个文本框的值不等于其他文本框的值,它应该发出警告,并对db做同样的事情。而且存在问题。它没有得到正确的总和。我的意思是,如果我在第一个文本框中的值为15,然后在其他文本框中,值为10,然后,值为5 ..(10 + 5等于第一个文本框)它不应该发出警报,并执行它需要输入db这个数据。但它并没有。它提醒等等。如何从文本框到另一个文本框中获得此总和?感谢

function checkForm() {
    if ($('#nr_articol').val().length === 0) {
        alert("Nr articol trebuie sa fie introdus! ");
        return false;
    }
    return true;
}

function checkForm2() {
    if ($("#scurt_smd").val() + $("#incomplete_smd").val() + $("#bile").val() + $("#scurt_val").val() + $("#incomplete_val").val() + $("#lipsa_smd").val() + $("#invers_smd").val() + $("#componente_lipsa").val() + $("#componente_inversate_1").val() + $("#lipire_hotbar").val() + $("#componente_inversate_2").val() + $("#componente_inversate_3").val() + $("#componente_inversate_4").val() != $('#optic').val() || $('#electric').val()) {
        alert("Ai introdus mai multe sau mai putine bucati decat ai verificat in total. Verifica inca odata!");
        return false;
    }
    return true;
}

$(document).ready(function () {
    $('#submitbtn').click(function () {
        if (checkForm() == true) {
            if (checkForm2() == true) {
                var frm = $('#form');
                // var data = JSON.stringify(frm.serializeArray());
                var data = frm.serializeArray();
                console.log(data);

                $.ajax({
                    type: 'post',
                    url: 'http://localhost:3000/',
                    contentType: 'application/json',
                    crossDomain: true,
                    data: JSON.stringify(data),
                    dataType: 'json',
                    success: function () {
                        alert('sucessfully inserted');
                    },
                    error: function (err) {
                        console.log(err);
                    }

                });
            }
        }
    });
});

2 个答案:

答案 0 :(得分:0)

所有这些数字加在一起的结果是什么?您可能需要将每个值转换为int:

parseInt($("#scurt_smd").val());

它可能正在进行字符串连接,因此1 + 2 + 3会出现为" 123"而不是6。

希望这有帮助。

答案 1 :(得分:0)

2个问题。

  1. 正如我评论的那样,你应该解析输入' sum之前的值为int。由于input.value是字符串,你现在所做的就是对它们进行汇总。

  2. 在您的A + B + C + .... != Y || Z等式中,您可能希望总和等于Y或Z,但事实是,如果Z可以评估为true,那么声明永远是真的,你应该写:

  3. var sum = A + B + C + .......;
    if (sum != Y || sum != Z)
    

    符合您的期望。

    因此,您可以将checkForm2重写为

    function checkForm2() {
      // Get sum.
      var sum = parseInt($("#scurt_smd").val(), 10) + parseInt($("#incomplete_smd").val(), 10) + parseInt($("#bile").val(), 10) +
                            parseInt($("#scurt_val").val(), 10) + parseInt($("#incomplete_val").val(), 10) + parseInt($("#lipsa_smd").val(), 10) +
                            parseInt($("#componente_lipsa").val(), 10) + parseInt($("#lipire_hotbar").val(), 10) + parseInt($("#invers_smd").val(), 10) + 
                            parseInt($("#componente_inversate_1").val(), 10) + parseInt($("#componente_inversate_2").val(), 10) + parseInt($("#componente_inversate_3").val(), 10) + 
                            parseInt($("#componente_inversate_4").val(), 10);
    
        var optic = parseInt($('#optic').val(), 10);
        var electric = parseInt($('#electric').val(), 10);
    
        // You may need to check all of them are valid numbers 
        // like 
        // if (isNaN(sum) || isNaN(optic) || isNaN(electric)) {
        //   do something.
        // }
    
        // If sum is not equal to any of them. or if the 3 values should all be the same, replace && with ||
        if (sum !== optic && sum !== electric) {
            alert("Ai introdus mai multe sau mai putine bucati decat ai verificat in total. Verifica inca odata!");
            return false;
        }
        return true;
    }