2012-08-28 19 views
1

我已經看過幾篇有關此主題的帖子,但相當沒有得到答案。我有一個onClick事件,只有在調用Uploadfile()函數後才調用Uploadfile()函數,我希望調用EnableSaveButton()函數。下面粘貼的是代碼,我有用於click事件,Uploadfile()函數和EnableSaveButton()函數。目前只有Uploadfile()被調用,但EnableSavebutton()函數不會被觸發。如果有人能告訴我我做錯了什麼,我將不勝感激。JavaScript中的事件順序無法正常運行

***更新:讓我重新提出問題。如何確保EnableSaveButton()僅在調用UploadFile()後才被調用。目前發生的情況是,EnableSaveButton在UploadFile()之前觸發。

$("#btnUploadFile").click(function(event) { 
    event.preventDefault(); 
    uploadFile(); 
    EnableSaveButton(); 

}); 

function uploadFile() { 
    $.get('<%: Url.Action("UploadFile","Files") %>', null, function(getData) { 
     $(getData).appendTo('body'); 
    }); 
} 

function EnableSaveButton() { 
    var selectedvalue = $("#FileGuid").val(); 
    alert(selectedvalue); 
    if (selectedvalue != "") { 
     $("#btnSave").removeAttr("disabled"); 
    } 
}​ 

回答

1

您在您的點擊處理程序中聲明瞭一個匿名函數,該函數從不會被調用。

function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
} 

爲什麼你會不會只是這樣做:

$("#btnUploadFile").click(function (event) { 
    event.preventDefault(); 
    uploadFile(); 
    EnableSaveButton(); 
}); 
+0

我沒有這麼做的原因是因爲EnableSaveButton()在UploadFile()函數被調用之前被觸發。 – sansid

2
function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
} 

此功能已宣告但尚未分配,也不使用...所以你的函數EnableSaveButton不叫。

0

此:

function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
} 

聲明一個匿名函數取一個參數(稱爲事件)。它不會被稱爲地方。如果你想叫你的函數,那麼你可以這樣做:

(function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
})(event); 

或:

var handler = function (event) { 
    event.preventDefault(); 
    EnableSaveButton(); 
} 
handler(); 

或簡單一些:

EnableSaveButton(); 
+0

EnableSaveButton()在UploadFile()之前被觸發,我想確保只有在Upload()函數完成後才調用EnableSaveButton()。 – sansid

+0

哦,我明白了。那麼問題是'$ .get'是一個異步方法,所以它的回調不會發生,直到它完成與服務器的交談。同時你的其他方法被調用。可以在回調中指定其他方法,或者使用[ajax](http://api.jquery.com/jQuery.ajax/)並將'async'設置爲'false'。 – RichardTowers

1

我相信你想要的EnableSaveButton()函數後調用UploadFile()函數完成(或更具體地說,在UploadFile函數內的Ajax調用完成後),更正?

$("#btnUploadFile").click(function (event) { 
      event.preventDefault(); 
      uploadFile(); 
     }); 

    function uploadFile() { 
     $.get(
      '<%: Url.Action("UploadFile","Files") %>', 
      null, 
      function (getData) { 
       $(getData).appendTo('body'); 
       EnableSaveButton(); 
      } 
     ); 
    } 
+0

正確,但是當我在UploadFile()函數內部有EnableSaveButton()函數時,EnableSaveButton()首先觸發。 – sansid

+0

這就是爲什麼在我發佈的示例中,對'EnableSaveButton'的調用是'$ .get'調用的「成功」函數的一部分。 – AndrewR

+0

我有和你發佈的代碼完全相同的代碼,但是在getData完成之前觸發EnableSaveButton() – sansid

0

那麼爲什麼不調用EnableSaveButton作爲上傳文件的ajax代碼的回調。我一直都在使用這種技術。 ajax請求獲取一些數據並將其轉儲到頁面中,然後執行用戶定義的回調以調整滾動條,表單元素等。