最近在項目中遇到了許多上傳問題,公司內部的組件,通過form上傳,需要使用input=file觸發選擇文件,
因為input=file在各個瀏覽器中顯示的樣式是不同的,谷歌,火狐,IE都有所不同,而且不太美觀,所以為了解決
這一個問題,一開始采用了隱藏input=file 然后通過一個顯示的button間接觸發input=file的click事件如下
<input type="file" id="upload" style="display:none">
<input type="button" value="上傳" onlick="document.getElementById('upload').click()"/>
經過測試在IE9+,谷歌,火狐下均能夠正常使用,能夠正常上傳,但是在IE8下卻出現了問題,不管如何選擇
都無法觸發change事件,經過查詢,原來基於安全限制,IE8下將間接觸發的input=file的值情況了,這樣就導致了
始終無法觸發change事件的問題。然后經過一番搗鼓+百度終於弄出了一個兼容的東西:
<div ><input type='file'><a>上傳</a></div>
首先將input=file方在一個div中,DIV設置position,並且overflow=hidden,並且讓input=file大小和寬度足以覆蓋
整個DIV,同時讓其的透明度opacity為0,這樣就能顯示被覆蓋的a標記上傳,但實際點擊的卻是覆蓋在最上面的input=file標簽
這樣就解決了兼容問題。
上傳的時候還有一個小兼容問題,好像在IE版本下如IE8,INPUT=FILE是只讀的,為了清空input=file,每次上傳完成之后
必須手動清空,即先克隆該節點,然后再替代原來的節點。。
不足:但是這樣做仍然有一個問題,在谷歌下鼠標移入input=file標簽時,鼠標手型不起作用,這就導致了用戶體驗不好,暫時還沒有想到解決辦法。
組件是基於form上傳,沒能實現進度條,為了兼容不能使用HTML5,因此嘗試自己搗鼓flash上傳,結果慘敗。。。實力不濟。多多學習。
