2013-05-05 16 views
1

所以我有一些輸入類型=「數量」字段後 - 當他們改變了我這條命令:得到一個輸入值變化事件

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

的checkAmount功能運行AJAX請求更改元素的值,以檢查該數字是否低於或高於某個其他數字(可以說5)。如果是更高,它設置一個隱藏字段的值,唯一的每個數字領域,爲「真」:

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

接下來,allowSubmit功能應該檢查所有那些真/假字段的值,如果其中任何一個設置爲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提取的值是absolut當前值 - 而不是更改操作之前的值。

任何人有任何想法?

+0

內'setPrices'和'allowSubmit'應該從你的Ajax請求的成功處理程序的一部分運行。 – 2013-05-05 18:23:59

回答

0

這是一個經典問題:由於ajax函數是異步的,所以您需要從您給它的回調中執行allowSubmit,也就是說,如果我關注你,在checkAmount之內。

+0

謝謝!它做了詭計。我現在在ajax請求的.done段中運行alowSubmit()。 – 2013-05-05 18:34:24

0

的allowSubmit功能應該檢查所有那些真/假字段的值,

,如果你正在檢查的真/假,是由Ajax請求更改的字段,那麼你應該打電話給你allowsubmit AJAX .. 和使用prop()的成功回調..

if (givenError == "true") { 
    $("#cartSubmitBtn").prop("disabled", true); 
} else { 
    $("#cartSubmitBtn").prop("disabled",false); 
}