關於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。