2013-01-19 97 views
1

我通過Chrome和Firefox運行此代碼,它運行良好。每當我爲了測試目的通過Internet Explorer運行它時,它都不起作用。我檢查了JavaScript的consule,我得到:SCRIPT5007:無法獲取屬性'0'的值:對象爲空或未定義。有人可以告訴我爲什麼會出現這種情況,我能做些什麼來解決它?SCRIPT5007:無法獲取屬性「0」的值:對象爲空或未定義

$('#audiofile1').bind('change', function() { 
    if (this.files[0].type != 'image/png') { 
     $('#audiofile1').each(function() { 
      $(this).after($(this).clone(true)).remove(); 
     }); 
     alert(this.files[0].name + ' is not a valid file type.'); 
    } else { 
     if (this.files[0].size > '5000') { 
      $('#audiofile1').each(function() { 
       $(this).after($(this).clone(true)).remove(); 
      }); 
      var size = this.files[0].size; 
      var maxSize = 100; 
      var exceedingSize = size - maxSize; 
      alert(this.files[0].name + ' exceeds the maximum file size'); 
     } else { 
      $("#audiofile1").fadeTo(1500, 0.20); 
      alert(this.files[0].name + ' was added successfully.'); 
     } 
    } 
}); 
+0

你的實際JSON對象「這個」你可以發佈示例嗎?如果它尾隨逗號多數民衆贊成你的問題 – sajawikio

回答

2
if (this.files[0].type != 'image/png') { 

內部事件處理程序,jQuery讓this爲其處理程序註冊的DOM元素。該元素沒有定義的files屬性,或者該屬性的值爲nullundefined

這是因爲Internet Explorer 9及以下版本不支持File API。你或許應該只跳過結合的處理程序,如果文件API不可用:

if ($('#audiofile1')[0].files) { 
    $('#audiofile1').bind('change', function() { 
     // ... 
    }); 
} 
+0

啊,我明白你在說什麼。我會試試看! –

1

顯然,IE only supports the HTML5 File API starting with version 10.因此,在IE 9,沒有.files屬性來訪問的。

不幸的是,我不知道有什麼辦法可以解決這個問題,除了告訴你的用戶升級和/或爲舊版瀏覽器上的用戶提供一些替代(可能是服務器端)方法來完成你所做的任何事情正在做。就你而言,假設你最終將文件上傳到服務器進行進一步處理,你可以跳過不支持它們的瀏覽器上的客戶端檢查,並簡單地告訴你的用戶什麼樣的文件將是公認。

1

嘗試打開Jquery UI對話框時出現此錯誤(相同/相似): SCRIPT5007:無法獲取屬性'_focusTabbable'的值:對象爲空或未定義。

,我提出,似乎已造成此錯誤的變化...:
一)變更將jQuery 1.9.1
B)切換到jQuery UI的1.10.1
三)增加了 'appendTo'選項用於對話框調用。

A)+ B)> C)

我需要做的(c)中,因爲我已經加入(15)的jquery對話框來先前具有佈置爲隱藏/顯示DIV一些窗體元素的現有的頁面元素。我想獲得包括形態在內的jquery對話框功能。問題在於子表單元素通過在元素外部附加到文檔而被jquery重寫,因此當提交表單時不再包含對話框中的表單域。

無論如何,有沒有人有比上述更好的解決方案來解決這個問題?

相關問題