我正在爲HTML表單中的文件輸入蒙皮。我通過隱藏輸入來實現結果,然後我設計了自己的按鈕並點擊該按鈕,觸發隱藏輸入上的點擊事件以打開本機瀏覽窗口。這是有效的,但是當我關閉瀏覽窗口時,Javascript提交處理程序在窗體上觸發(但沒有真正發生,只有事件被觸發)。爲什麼觸發文件輸入的點擊事件也會觸發表單上的事件?
我準備了一個小提琴:http://jsfiddle.net/Ebcu5/
HTML:
<form id="form">
<input id="file" type="file" name="photo" />
<button id="upload">Browse</button>
</form>
JS:
$("#form").submit(function(){
alert('submit event triggered');
});
document.getElementById('upload').addEventListener('click',function(){
var evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true);
uploading = true;
document.getElementById('file').dispatchEvent(evt);
});
CSS:
input#file { position: fixed; top: -100px; }
button { border: solid 3px black; border-radius: 3px; font-size: 18px; line-height: 20px; text-transform: uppercase; font-family: Arial; line-height: 31px; background: #fd6706; border-radius: 13px; }
很可能您錯過了診斷問題。我看到沒有ID =「上傳」的元素,我敢打賭這是按鈕。點擊一個按鈕會觸發提交事件,除非該按鈕被專門設置爲type =「button」。 http://jsfiddle.net/Ebcu5/1/ –
爲什麼你會像這樣一起使用普通的JS和jQuery?會更清潔,更簡單,只是jQuery ... –
對不起,這是一個複製和粘貼錯誤...我的按鈕有id =「上傳」的小提琴。上傳的文件。 –