文本框值计算不正确

Textbox values are not calculated right

本文关键字:不正确 计算 文本      更新时间:2023-09-26

我已经使用html和jquery创建了一个表单。它连接到数据库,它应该在数据库中输入在文本框中写入的值。但我有以下问题。如果一个特定的文本框没有输入值,它应该发出警告,并阻止数据进入数据库。一切顺利。同时,我还想要一个文本框,如果这个文本框的值不等于其他文本框的值之和,它就会发出警报,对db也一样。这就是问题所在。它没有得到正确的总和。我的意思是,如果我在第一个文本框中设置值为15,然后在其他文本框中设置值为10,然后设置值为5。(10+5等于第一个文本框),它不应该发出警报,并按照要求在数据库中输入此数据。但事实并非如此。它会发出警报等等。我怎样才能从一个文本框到另一个文本框得到这个和呢?由于

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

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

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

它可能会做字符串连接,所以1 + 2 + 3会显示为"123"而不是6。

2个问题

  1. 正如我所评论的,您应该在sum之前将输入的值解析为int。作为输入。

  2. 在您的A + B + C + .... != Y || Z方程中,您可能希望求和等于Y或Z,但事实是,如果Z可以求值为true,则语句始终为真,您应该写:

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