file input的默認外觀實在不好看,所以我們要搞定它。。
1. 首先,我們把file input放入一個label,並且將這個label顯示為一定的寬高,比如顯示為(bootstrap)btn的樣式(這個label你把樣式搞成啥樣都行,都不會影響后面的功能);
2. 為此input增加樣式,內聯或css文件內寫都可以:style="left:-9999px;position:absolute;"
3. 在label內增加文本(作為label btn的顯示文本),比如下方示例中的span;
<label id="realBtn" class="btn btn-info"> <input type="file" id="fileInput1" name="file" class="mFileInput" style="left:-9999px;position:absolute;"> <span>導入EXCEL數據</span> </label>
如此即可,無需再添加任何js函數,就能讓這個label在被點擊時,與file input點擊產生同樣的效果。這是label標簽的一個bug,但是這個bug的通用性極好,連ie7都沒問題。
我也查過網上的一些方案,我建議大家不要使用triger等模擬點擊的方式觸發file input的點擊,從安全角度講,js是不建議這樣做的,所以兼容性完全沒有保障,再就是,使用透明file input在指定區域懸掛遮蓋鼠標的方式,因為要用js處理,所以在性能上會有問題,同時,經我測試,在快速操作時,還是會暴露出一些bug的,很撓頭,只有我在本文中所寫的方法,才是我認為最上乘的方案,有更好的方案,歡迎大家的指點。
如果需要顯示文件名,就在file input的change事件里取它的value就行了。
但是這里就有另一個問題了,就是選擇相同的文件不觸發change,而且file input的value的清空方法,各瀏覽器兼容性並不好,但是這個與本貼主題關系不大,我在另一貼中寫一寫我的解決方法:http://www.cnblogs.com/laozuan/p/4660405.html