Javascript 为什么我的函数返回“;未定义”;而不是布尔值 $(文档).ready(函数(){ $(“表格”)。提交(功能(e){ 如果(!checkStockOfProduct()) { e、 预防默认值(); 返回false; } 返回真值 }); });

Javascript 为什么我的函数返回“;未定义”;而不是布尔值 $(文档).ready(函数(){ $(“表格”)。提交(功能(e){ 如果(!checkStockOfProduct()) { e、 预防默认值(); 返回false; } 返回真值 }); });,javascript,return-value,Javascript,Return Value,storeinputoutput.js文件: 函数checkStockOfProduct(){ var allowSubmitForm=true; $(“table#StoreItemdatatable>tbody>tr”)。每个(函数(){ . . . var storeId=$('#storeId').val(); var股票=空; var URL='/aaa/bbb' $.ajax({ async:false, url:url, contentType:'application/x-www

storeinputoutput.js文件:

函数checkStockOfProduct(){
var allowSubmitForm=true;
$(“table#StoreItemdatatable>tbody>tr”)。每个(函数(){
.
.
.
var storeId=$('#storeId').val();
var股票=空;
var URL='/aaa/bbb'
$.ajax({
async:false,
url:url,
contentType:'application/x-www-form-urlencoded',
数据类型:“json”,
数据:{
productNServiceID:productNServiceID,
storeID:storeID
},
键入:“POST”,
成功:功能(数据){
股票=数据。股票;
}
,错误:函数(jqXHR,异常){
}
});
如果(…){
allowSubmitForm=false;
}
返回allowSubmitForm;
});
}
在表单提交中,我调用了函数,如果函数返回false,我就不会执行提交操作。 但是xx变量的值总是未定义的

请告知 使用警报进行检查。最后一行中函数“checkStockOfProduct”中的变量“allowSubmitForm”有值,而不是“未定义” 但是在Submit中它是未定义的

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();
    });
});
  • 我知道您想要返回布尔值,所以请使用true和false而不是'true'和'false' 为什么?不带引号的是布尔值,而带引号的是字符串。javascript中的非空字符串将始终返回true,而空字符串将返回false(您正在返回img non-empty strings,在这种情况下,结果显然不是您想要的结果)

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

  • 我注意到了你问题的更新,我真的不明白你想做什么,但在我看来,产品检查的结果似乎决定了你是否会阻止提交时提交默认表单并返回false。 我还假设,
    CheckSumOfProduct
    函数是同步的 让我们重构代码,以执行与您尝试执行的相同的操作,但看起来像这样==>

  • 让我知道这是否可行…我在运输途中,在移动atm上

    false和'false'不一样。如果要返回布尔值,请不要在值周围加引号。这是一个字符串。@Barmar@ThisIsNoZaku他说它返回
    未定义的
    。如果原因是字符串'false'和'true',他将收到一个字符串,并有另一种错误。我们需要更多的代码@Miss,这样我们才能理解它为什么不工作。我担心产品的
    checkStockOfProduct
    功能可能过于简化了。它有一个流氓
    })未定义的
    。如果您想获得问题的帮助,您必须共享实际代码。当您共享了一个完全正常工作的代码片段时,我们不能一直猜测这个问题。为什么要麻烦使用
    if(!Boolean(xx))
    而不是
    if(!xx)
    ?与更传统的布尔对象相比,使用布尔对象类型有什么好处?@JMoravitz您可以使用传统的!但是Boolean()函数的优点是,无论变量类型如何,它总是返回true或false。例如,如果xx为“未定义”或“null”,则“if(xx==false)”的比较将返回false,但“if(Boolean(xx)==false)”将按预期返回true。通过完全删除不必要的
    ==false
    条件的一部分,您的
    (!xx)
    将为所有false值返回true,包括false、未定义、null、,和NaN等,不管
    (xx==false)
    是否返回true。此外,由于我们控制了
    xx
    ,我们应该能够保证在我们检查它时它可能具有的值。@Miss You在checkStockOfProduct()中的代码最后一行有一个额外的
    。这很有帮助,但并没有回答OP的问题,即“为什么它返回未定义的
    ?”。这些指针更适合作为注释(其他用户已经做了)。
    
    const checkSumOfProduct = (whatever...) ? false : true
    
    $(document).ready(function() {
        $("form").submit(function(e) {
            if(!CheckStockOfProduct()){
               e.preventDefault()
               return false
             } 
               return true
        });
    });