在更改事件后获取输入的值

时间:2013-05-05 18:21:53

标签: jquery

所以我有一些输入类型=“数字”字段 - 当它们被更改时我运行它:

$('.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拾取的是绝对当前值 - 而不是更改操作之前的值。

有人有什么想法吗?

2 个答案:

答案 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);
}