繁体   English   中英

为什么我的函数返回“未定义”而不是布尔值

[英]Why is my function returning “undefined” instead of boolean

$(document).ready(function() {
    $("form").submit(function(e) {

         if (!checkStockOfProduct())
         {
           e.preventDefault();
           return false;
         }
         return true
    });
});

<script src="~/Scripts/storeinputoutput.js"></script>

storeinputoutput.js 文件:

function checkStockOfProduct() {
    var allowSubmitForm = true;
    $("table#StoreItemdatatable > tbody > tr").each(function () {

    .
    .
    .

        var storeId = $('#StoreID').val();

        var stock = null;
        var URL = '/aaa/bbb' 
        $.ajax({
            async: false,
            url: URL,
            contentType: 'application/x-www-form-urlencoded',
            dataType: 'json',
            data: {
                productNServiceID: productNServiceID,
                storeID: storeId
            },
            type: 'POST',
            success: function (data) {
                stock = data.Stock;
            }
            , error: function (jqXHR, exception) {

            }

        });



        if (...) {
            allowSubmitForm = false;
        }
        return allowSubmitForm;

    });
}

在 form submit 中,我调用了该函数,如果函数返回 false,我不会执行提交操作。 但是 xx 变量的值总是未定义的。

请指教

使用警报检查。 最后一行中函数“checkStockOfProduct”中的变量“allowSubmitForm”具有值而不是“undefined”但在Submit中它是undefined

  1. 我知道你想返回布尔值,所以使用 true 和 false 而不是 'true' 和 'false' 为什么? 不带引号的是布尔值,带引号的是字符串。 javascript 中的非空字符串将始终返回 true 而空字符串将返回 false(您在那里 returnimg 非空字符串,结果显然不是您在这种情况下想要的)。

  2. var 有点棘手,我建议我们下次使用 let 。 由于您在 checkStockOfProduct 函数中似乎没有做很多事情,因此我会将其重构为 ==>

const checkSumOfProduct = (whatever...) ? false : true
  1. 我注意到您的问题的更新,我真的不明白您在那里尝试做什么,但在我看来,checkStockOfProduct 的结果似乎决定了您是否会在提交时阻止默认表单提交并返回 false。 我还假设CheckSumOfProduct函数是同步的让我们重构该代码以执行您尝试执行的相同操作,但看起来像这样 ==>
$(document).ready(function() {
    $("form").submit(function(e) {
        if(!CheckStockOfProduct()){
           e.preventDefault()
           return false
         } 
           return true
    });
});

如果这行得通,请告诉我...我正在运输途中并使用移动自动取款机

尝试

function checkStockOfProduct() {
    var allowSubmitForm = true;
    if (...) {

        allowSubmitForm = false;
    }

    return allowSubmitForm;

  };

并根据函数返回值调整您的 submit() 事件处理程序:

$(document).ready(function () {
    $("form").submit(function (e) {
       if (checkStockOfProduct()) {
          //valid
          return;
       }
       //invalid
       e.preventDefault();
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM