1

所以我有许多输入 type="number" 字段 - 当它们被改变时,我运行这个:

$('.amount-input').change(function() {
   checkAmount($(this));
   setPrices();
   allowSubmit();
});

checkAmount 函数使用更改元素的值运行 ajax 请求,以检查该数字是低于还是高于某个其他数字(比如说 5)。如果它更高,它将每个数字字段唯一的隐藏字段的值设置为“true”:

var $toHighAmount = aElement.prev().prev().prev();
$toHighAmount.val('true');

接下来,allowSubmit 函数应该检查所有这些真/假字段的值,如果其中任何一个设置为真,它应该禁用提交按钮。

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() 确实改变了隐藏的真/假字段的值。但是 - 当 allowSubmit() 运行时,它会处理该字段的旧值。因此,例如:

如果我将 input type="number" 的值设置为 4,则 true/false 字段设置为 false。如果我然后将 input type="number" 更改为 6 - true/false 字段设置为 true(意味着 6 高于 5) - 但是当 allowSubmit 运行时它仍然认为该值为 false - 并且不会禁用提交按钮。只有当我再次增加数字时 - allowSubmit 才知道有一个真正的价值。

反过来也是一样。我必须将数字字段两次更改为低于 5 的值才能再次激活提交按钮。

所以 - 总之 - 我需要确保 allowSubmit 获取的值是绝对当前值 - 而不是更改操作之前的那个值。

有人有想法么?

4

2 回答 2

0

这是一个经典问题:由于ajax函数是异步的,你需要allowSubmit从你给它的回调中执行,也就是说,如果我跟着你,在里面checkAmount

于 2013-05-05T18:23:52.170 回答
0

allowSubmit 函数应该检查所有这些真/假字段的值,

如果您正在检查由 ajax 请求更改的字段的真/假,那么您应该在allowsubmitajax 的成功回调中调用您的 .. 并使用prop()..

if (givenError == "true") {
  $("#cartSubmitBtn").prop("disabled", true);
} else {
  $("#cartSubmitBtn").prop("disabled",false);
}     
于 2013-05-05T18:25:12.963 回答