1. 程式人生 > >關於IE9下用按鈕觸發file上傳控制元件,請求無法觸發的問題

關於IE9下用按鈕觸發file上傳控制元件,請求無法觸發的問題

很多系統為了美觀,都會在網頁中用一個隱藏的按鈕觸發file上傳控制元件,一般正常的在Chrome和Firefox下沒有問題,但是切換到IE9和IE10下請求無法到達後臺,這是因為IE9和IE10為了安全考慮,阻止了不是直接點選file的上傳。因為這個問題,折騰了一天,參考網上的案例,結合自己的實際情況,終於找到一個比較靠譜的解決方案。

用一個label標籤,label的for屬性指向file文字框

<input type="file" id="uploadfile" name="file" style="display:none;" onclick="upload();" />

<label for="uploadfile"></label>

label的樣式可以自己調整

每次上傳時,點選label標籤,就可以直接觸發file控制元件。

我這裡因為用的是jquery.ajaxfileupload.js的上傳外掛,因此在IE下還有一個問題,就是清空file檔案框的值時,總是無法清空,導致二次上傳時,無法觸發檔案框的change事件。

因此用了另外一個清空檔案框內容的方法

var clearFileInput  = function(name) {

        var f = $("input[name='"+name+"']:file");

        f.val("");

        var cf = f.clone();

        f.remove();

        cf.appendTo("body");

};

還有一個是在IE9下如果用springmvc的框架,在後臺直接輸出json的話,前臺會直接去下載json檔案,解決辦法是用HttpServletResponse物件向頁面寫入資料,並設定資料型別為text/html。