2011-03-02 64 views
2

因此,這裏的scenario-如何應對click事件上的輸入型=非IE瀏覽器的文件瀏覽器

不像關於如何調用上輸入的單擊事件在計算器上3000個的其他問題[type = file ]元素,我只想回應它。我在尋找類似:

<input id="theFile" onclick="var that=this;setTimeout(function(){if(that.value){postTheForm();}}),0);" /> 

我並不想調用點擊()的元素,我只想當有人選擇了一個文件,因此我們就可以提交表單就知道了。在IE中,它按預期工作,因爲文件對話框會休眠JavaScript線程,直到用戶在對話框中單擊「打開」或「取消」。在FireFox中,似乎對話框不會睡眠線程,並且匿名函數會立即觸發 - 即使對話框仍然處於啓動狀態。

我在想我可以使用onchange事件,還是FireFox中的其他功能來模擬IE行爲,但迄今爲止還沒有任何運氣。關於如何在用戶點擊對話框中的打開或取消後執行代碼的任何想法?

+0

您可以關注控件,然後當對話框關閉時,您可以響應文件上傳控件的模糊事件。請參閱下面的答案。 – 2011-03-02 20:12:59

回答

0

使用:onchange="submitForm()"

+0

哇!我剛剛意識到,我的測試用例很糟糕,當我運行這個測試用例時,我沒有正確地連接事件處理程序。我在FF3.6,IE9,IE6和Chrome中測試了它,它適用於所有這些。我不敢相信我犯了這樣一個愚蠢的錯誤。謝謝! – mhildreth 2011-03-02 21:26:41

+0

不客氣。當最簡單的解決方案實際工作時,我喜歡它! – Detect 2011-03-02 21:32:48

0

那麼你可以啓動一個間隔計時器來檢查每100毫秒左右。

$('input:file').click(function() { 
    var file = this, form = this.form, val = this.value, interval; 
    function checkValue() { 
    if (file.value !== val) { 
     cancelInterval(interval); 
     form.submit(); 
    } 
    } 
    interval = setInterval(checkValue, 100); 
}); 

這是有點脆弱,因爲文件輸入的「值」不是一個完整的路徑。但是,由於無論如何都要提交整個表單,用戶實際上沒有機會多次單擊文件元素。

編輯 —這是假設「更改」事件真的不適合你;我目前沒有可用的Firefox。

1

當您單擊文件上傳的jQuery告訴關注它,當你選擇一個文件,然後單擊打開/取消它會失去焦點又名blur

$(function() { 
    $("#fileUpload").click(function() { 
     $(this).focus(); 
    }); 
    $("#fileUpload").blur(function() { 
     alert("blurred"); 
    }); 
}); 

我用鉻測試了這個。