2011-07-11 19 views
0

在IE7中,當在.submittable點擊事件中調用此代碼時,我必須單擊提交按鈕兩次以獲取要設置的orderCount全局變量。或者,如果我在隱藏標籤上設置屬性值,我會得到相同的體驗。對於要設置的元素值,我必須單擊按鈕兩次。這就像我需要給瀏覽器更多的時間來處理。任何建議?謝謝你,內特在IE7中,如何在jquery .click事件中使用ajax調用來設置全局變量或元素值?

var orderCount = 0; 
$(document).ready(function(){ 
$('.submittable').click(function(){ 
     setOrderCount() 
     if (orderCount == 0){ 
      if (validateAcknowledment($(this).attr('id'))){ 
       acknowledgeDay($(this).attr('id')); 
      }  
     } 
    }); 
}); 
function setOrderCount(){ 

    // move this up to validate and do a setAtr 
    var school = $("#school").val(); 
    var orderDate = $("#orderDate").val(); 
    $.ajax({ 
     url: "/fos/inventory/getPreviousWeeklyMenuOrders", 
     type: "GET", 
     dataType: 'json', 
     cache:false, 
     data: {school: school, 
      startWeekMonth: Date.parse(orderDate).getMonth(), 
      startWeekDay: Date.parse(orderDate).getDate(), 
      startWeekYear: Date.parse(orderDate).getFullYear() 
     }, 
     success: function(data) { 

      orderCount = data.orderCount; 
      if(orderCount > 0){ 
       showErrorMessage("You must Acknowledge prior Weekly Menu Order(s) before acknowledging this week's order", 200, 300); 
      } 

     } 
}); 

回答

2

這些問題出現了很多,這是驚人的。

默認情況下,AJAX調用是異步的。您在第4行發起呼叫,然後在第5天檢查orderCount,然後再完成異步呼叫。在第二次點擊時,你的異步調用已經完成,代碼正在做你認爲應該在第一次點擊時做的事情。

您需要在您的匿名'成功'回調函數內移動您的orderCount檢查邏輯,以便僅在呼叫完成時執行。或者讓ajax調用同步(jQuery選項)

1

首先,你需要認識到setOrderCount是一個異步函數。它將啓動ajax調用,並且該ajax調用可能需要一段時間來處理。 setOrderCount函數將在ajax調用完成之前很久返回,並且很久之後纔會設置orderCount變量。

然後,在您的點擊處理程序中,您立即檢查orderCount變量,但尚未設置。你需要做的是將這些代碼從ajax調用移到成功函數:

if (orderCount == 0){ 
     if (validateAcknowledment($(this).attr('id'))){ 
      acknowledgeDay($(this).attr('id')); 
     }  
    } 

因爲那是當orderCount變量被實際設置的時候。

相關問題