所以我有一些输入类型=“数字”字段 - 当它们被更改时我运行它:
$('.amount-input').change(function() {
checkAmount($(this));
setPrices();
allowSubmit();
});
checkAmount函数使用已更改元素的值运行ajax请求,以检查该数字是否低于或高于其他某个数字(假设为5)。如果它更高,则将每个数字字段唯一的隐藏字段的值设置为“true”:
var $toHighAmount = aElement.prev().prev().prev();
$toHighAmount.val('true');
接下来,allowSubmit函数应检查所有这些true / false字段的值,如果其中任何一个设置为true,则应禁用提交按钮。
function allowSubmit() {
var givenError = "false";
$( ".rowToHighAmount" ).each(function() {
var val = $(this).get(0).value;
if (val == "true") {
givenError = "true";
}
});
if (givenError == "true") {
$("#cartSubmitBtn").attr("disabled", "disabled");
} else {
$("#cartSubmitBtn").removeAttr("disabled");
}
}
所以 - 问题。 checkAmounts()确实会更改隐藏的true / false字段的值。但是 - 当allowSubmit()运行时,它会处理该字段的旧值。所以,例如:
如果我将input type =“number”的值设置为4,则将true / false字段设置为false。如果我然后将input type =“number”更改为6 - 将true / false字段设置为true(意味着6大于5) - 但是当allowSubmit运行时,它仍然认为该值为false - 并且不会禁用提交按钮。只有当我再次增加数字时 - allowSubmit才能理解这是真正的价值。
另一种方式也是如此。为了再次激活提交按钮,我必须将数字字段两次更改为低于5的内容。
所以 - 总之 - 我需要确保值allowSubmit拾取的是绝对当前值 - 而不是更改操作之前的值。
有人有什么想法吗?
答案 0 :(得分:0)
这是一个经典问题:由于ajax函数是异步的,你需要从你给它的回调中执行allowSubmit
,也就是说,如果我跟着你,在checkAmount
内。
答案 1 :(得分:0)
allowSubmit函数应该检查所有那些true / false字段的值,
如果你正在检查ajax请求改变的字段的真/假,那么你应该在ajax的成功回调中调用你的allowsubmit
。
并使用prop()
..
if (givenError == "true") {
$("#cartSubmitBtn").prop("disabled", true);
} else {
$("#cartSubmitBtn").prop("disabled",false);
}