2015-10-05 65 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