2015-10-05 85 views
-1

請注意之間的不同之處在於$ a的包括的範圍(文件)。就緒(函數(){})這是什麼兩個代碼

原來的代碼是:

var files = []; 
    $(document).ready(function(){ 
     $("input").change(function(){ 
     files = this.files; 
     }); 
    }); 

    $("#upload-btn").click(function(){ 
     var fd = new FormData(); 
     for (var i = 0; i < files.length; i++) { 
     fd.append("file", files[i]); 
     } 
     $.ajax({ 
     url: "/upload/", 
     method: "POST", 
     data: fd, 
     contentType: false, 
     processData: false, 
     cache: false, 
     success: function(data){ 
      console.log(data); 
     } 
     }); 
    }); 

改變的代碼是:

var files = []; 
$(document).ready(function(){ 
    $("input").change(function(){ 
     files = this.files; 
    }); 

    $("#upload-btn").click(function(){ 
     var fd = new FormData(); 
     for (var i = 0; i < files.length; i++) { 
     fd.append("file", files[i]); 
     } 
     $.ajax({ 
     url: "/upload/", 
     method: "POST", 
     data: fd, 
     contentType: false, 
     processData: false, 
     cache: false, 
     success: function(data){ 
      console.log(data); 
     } 
     }); 
    }); 
}); 

點是$所包含的範圍(文件)。就緒(函數(){}) 我不知道有什麼不同

+1

答案取決於這個腳本的位置,以及這些元素如何以及何時放置在DOM中。 –

+0

「不投入」是什麼意思?請你澄清一下。 – Abdel

+1

真正的問題是什麼?我假設你想知道爲什麼上傳按鈕點擊事件已經被準備好了嗎?非常簡單,在文檔加載之前,您無法單擊按鈕。 I.E.您不必等待document.ready –

回答

0

雖然你是對的,但爲什麼一個事件綁定是在事件處理程序中,另一個則不是。

通常,腳本位於頁面的頭部,並且兩個事件綁定都需要位於ready事件處理程序中才能使用。當你知道元素已經存在時,你需要運行事件綁定代碼。

如果在元素後面的頁面中包含代碼,則不需要ready事件就可以知道元素存在。

有一種情況下原始代碼會有意義。如果將它包含在按鈕下面但位於輸入上方,那將是如此。然後您知道按鈕已經存在,但您需要準備好的事件來等待輸入存在。

+0

是的,那是我想表達的 – zjien

+0

謝謝,我想我的問題已經被解決了 – zjien