1. 程式人生 > >WebUploader 選擇圖片按鈕點選無效問題

WebUploader 選擇圖片按鈕點選無效問題

專案中使用WebUploader做的圖片上傳功能,出現一個奇怪的問題,就是頁面第一次載入完成之後,點選瀏覽檔案的按鈕沒有反應。

以下是參考網上的一些說法:

問題的原因大體是這樣,WebUploader初始化的時候,封裝了一個input,type=‘file’。

瀏覽檔案按鈕實現原理是一個透明的層,點選這個層會觸發點選事件,如果在WebUploader初始化的時候,因為各種原因導致它動態獲取的元素大小有問題,

比如說網上一個網友的說法,初始化的時候因為獲取不到正確的自身或者容器的大小,這時候初始化出來的這個透明層的大小就會是1px*1px,這麼小的層,根本點不到。

所以也就觸發不了點選事件。

以上是網上的資料,我想問題的原因差不多就是類似的情況。我是剛接觸WebUploader,沒有深入研究,不過看官網的演示,以及其餘人的實現,這個問題應該已經解決了。

要是還出現這個問題,原因應該是自己頁面的因素比較多。

我這裡出現這個問題的最終原因是我上傳所使用的div層,設定了隱藏屬性。我使用的display:none來設定的隱藏。

經過測試,WebUploader的瀏覽檔案點選無效(但是重新渲染一下就可以點選,比如說按下F12)和這個display:none屬性有關係。

問題原因找到了,就好解決了,元素的隱藏顯示不用display,使用css控制。問題解決。

{ display: none; /* 不佔據空間,無法點選 */ } 
/********************************************************************************/ 
{ visibility: hidden; /* 佔據空間,無法點選 */ } 
/********************************************************************************/ 
{ position: absolute; top: -999em; /* 不佔據空間,無法點選 */ } 
/********************************************************************************/ 
{ position: relative; top: -999em; /* 佔據空間,無法點選 */ } 
/********************************************************************************/ 
{ position: absolute; visibility: hidden; /* 不佔據空間,無法點選 */ } 
/********************************************************************************/ 
{ height: 0; overflow: hidden; /* 不佔據空間,無法點選 */ } 
/********************************************************************************/ 
{ opacity: 0; filter:Alpha(opacity=0); /* 佔據空間,可以點選 */ } 
/********************************************************************************/ 
{ position: absolute; opacity: 0; filter:Alpha(opacity=0); /* 不佔據空間,可以點選 */ } 
/********************************************************************************/ 
{ 
zoom: 0.001; 
-moz-transform: scale(0); 
-webkit-transform: scale(0); 
-o-transform: scale(0); 
transform: scale(0); 
/* IE6/IE7/IE9不佔據空間,IE8/FireFox/Chrome/Opera佔據空間。都無法點選 */ 
} 
/********************************************************************************/ 
{ 
position: absolute; 
zoom: 0.001; 
-moz-transform: scale(0); 
-webkit-transform: scale(0); 
-o-transform: scale(0); 
transform: scale(0); 
/* 不佔據空間,無法點選 */ 
} 


最後補充點自己的感慨:網友的一些答案有時候很有啟發。display:none問題導致WebUploader點選無效,這個其實在一個問答裡面看到過(url找不到了),但是當時沒有多去思考,一看問題和我遇到的不是很貼切就快速瀏覽完關掉了頁面,現在想來,那個網友對這個理解是比較透徹的,而我是走了彎路,回頭來想想才意識到,解決方式已經搜到過。

我走的彎路是排除法,官網演示沒有問題,我自己的頁面有問題,所以我就一點點排除我的頁面。最笨的辦法,先只保留WebUploader上傳,測試發現沒有問題,原因找到,就是我頁面問題。然後逐個的排除我頁面的元素(要在一個什麼提示都沒有的頁面,找出來哪裡有衝突,感覺就頭大。但是,但是,但是,當你真正動手的時候才發現,困難比想象的要小很多。動手實踐才是王道)。