[js]uploadify結合jqueryUI彈出框上傳,js中的冒出的bug,又被ie坑瞭

方法一

 

開始想瞭,既然刷新一下就不會出現該bug,就在彈出框關閉時將頁面刷新。在彈出框的close的回調方法中添加代碼:window.location.reload();每次彈出框關閉時,加個頁面重新刷新一下,雖然解決瞭問題,但是,用戶體驗並不好,每次刷新,就會重新去讀一次數據庫,最後放棄瞭這個方式。

 

方法二

 

在彈出框的close的回調方法中,添加如下代碼:

 

1                 close: function () {

2                  

3                     if ($('#btnUpload').length > 0) { //註意jquery下檢查一個元素是否存在必須使用 .length >0 來判斷

4                         $('#btnUpload').uploadify('destroy');//如果存在,則將其銷毀

5                     } 

6                 }

再次測試,問題解決。

 

問題解決瞭,為什麼這就能解決問題呢?

 

猜想,第一次單擊上傳,根據上面列出的代碼,可知每單擊上傳,就會通過uploadify方法創建上傳flash對象,此時$('#btnUpload').length=1,此時id為(SWFUpload_0))的對象已經確定,關閉彈出框,但falsh對象仍然存在,並沒有銷毀。

 

再次單擊的時

 

try { 

document.getElementById("SWFUpload_0").SetReturnValue(__flash__toXML(SWFUpload.instances["SWFUpload_0"].testExternalInterface()) ); 

catch (e) { document.getElementById("SWFUpload_0").SetReturnValue("<undefined/>"); }

 

 

不再創建id為(SWFUpload_0))的flash對象,還是第一次創建的flash對象占著茅坑不拉屎(占著id,但名沒有創建對象),所以此時為null,為瞭保持id的唯一性?,ie對此有限制?,是不是其他瀏覽器,在id存在的情況下,會隨機生成一個新的id?不是搞前端的,不得而知瞭。

 

這也是自己的猜想,有高手的話,可以給個官方的說法,如果我這個猜想成立,那麼也從側面印證瞭為什麼刷新一下,就沒有那個bug瞭,刷新又重新加載html並且銷毀瞭flash對象,單擊上傳又變成瞭第一次單擊。

發佈留言