$(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;
});
}
在表单Submit中,我调用了该函数,并且如果函数返回false,我将不执行提交操作。 但是xx变量的值始终是不确定的。
使用警报检查。最后一行函数“ checkStockOfProduct”中的变量“ allowSubmitForm”具有值,而不是“未定义” 但是在“提交”中则未定义
答案 0 :(得分:0)
我了解您要返回布尔值,因此请使用true和false而不是'true'和'false' 为什么?不带引号的是布尔型,而带引号的是字符串。 javascript中的非空字符串将始终返回true,而空字符串将返回false(您在那儿返回的是非空字符串,结果显然不是这种情况下的结果)。
var有点棘手,我建议下次使用let。由于似乎在checkStockOfProduct函数中您没有做很多事情,因此我将其重构为==>
const checkSumOfProduct = (whatever...) ? false : true
CheckSumOfProduct
函数是同步的
让我们重构该代码以完成您尝试做的事情,但是看起来像这样==> $(document).ready(function() {
$("form").submit(function(e) {
if(!CheckStockOfProduct()){
e.preventDefault()
return false
}
return true
});
});
让我知道这是否可行...我正在运输途中并在移动atm上
答案 1 :(得分:-1)
尝试
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();
});
});