2013-07-17 113 views
4

屬性「名」我爲當「選擇文件」下面的代碼被點擊:遺漏的類型錯誤:無法讀取的不確定

$(':file').change(function() { 

if(this.files.length == 1) { 
    $('#selected_files').html("<h4>Attaching " + this.files.length + " file</h4>"); 
} else { 
    $('#selected_files').html("<h4>Attaching " + this.files.length + " files</h4>"); 
} 

$('#selected_files').append("<table class=\"altShaded\"><thead><tr><td></td><td>Filename</td><td>Size</td></tr></thead>"); 

for(x=0;x<=this.files.length;x++) 
{ 
    var file = this.files[x], 
    name = file.name, 
    size = file.size, 
    type = file.type; 
    $('#selected_files').append("<tr><td></td><td><b>" + name + "</b> ("+filesize(size)+") " + type + "<br>"); 
} 


}); 

很好,對不對?一切運作良好。這很好,除了當jQuery追加表格行時,它似乎喜歡開始一個新表格,並且頂部的<thead>未附加到行(在Chrome中)。

好吧,我想,我們只是建立一個字符串,並把它放在一次。

這樣:

$(':file').change(function() { 

     if(this.files.length == 1) { 
      var displayFiles = "<h4>Attaching " + this.files.length + " file</h4>"; 
     } else { 
      var displayFiles = "<h4>Attaching " + this.files.length + " files</h4>"; 
     } 


     var displayFiles = displayFiles + "<table class=\"altShaded\"><thead><tr><td></td><td>Filename</td><td>Size</td></tr></thead>"; 
     for(x=0;x<=this.files.length;x++) 
     { 
      var file = this.files[x], 
      name = file.name, 
      size = file.size, 
      type = file.type; 
      displayFiles = displayFiles + "<tr><td>" + type + "</td><td><b>" + name + "</b></td><td>"+filesize(size)+"</td></tr>"; 
     } 

     $('#selected_files').html(displayFiles); 
    }); 

但現在突然間,我收到以下錯誤:

* 遺漏的類型錯誤:無法讀取屬性未定義*

沒事的 '名'已經改變,除了它周圍的代碼。它指向:

名= file.name,

你能告訴我的問題是什麼嗎?

回答

5

這種類型的錯誤意味着您的容器變量file未定義。

,您應該使用console.log在不同的地方看到的定義是什麼,什麼是不(文件陣列等)

另外:

for(x=0;x<=this.files.length;x++) 

將不確定最後x值,因爲數組的最後一個元素是array.length - 1而不是array.length,這會在循環結束時給出一個未定義的值,可能是錯誤的根源。在你的情況下,x的值爲this.files.length 另外,總是使用var,否則你的x將是一個全局變量,這可能是另一個問題的根源。

正確的循環應該是:

for (var x = 0; x < this.files.length; x++) 
+0

對它排序!我沒有得到任何輸出,因爲最後它沒有定義。因此它從不將字符串設置爲Div。最後一個人有錯誤,我只是沒有看到它,因爲它正在輸出:) – Chud37

1

這是有問題的代碼,

for (var index = 0; index <= results.length; index++) { 
//doSumthing 
} 

工作代碼,

for (var index = 0; index < results.length; index++) { 
//doSumthing 
} 

的問題是與=運算符爲循環語句。它正在檢查數組中不存在的元素(最後一個元素+ 1)。

嘗試從您的循環語句中去除=,就像這樣。

for(var x = 0; x < this.files.length; x++){} 

它可能工作!

相關問題