2013-04-11 49 views
5

我試圖找到一種方法來運行JavaScript函數時,用戶選擇一個HTML select框中的選項,無論此選項是否已被選中。所以onchange是不可能的。替代onblur/onchange select

使用onblur的問題在於(至少在Chrome和Safari中),直到用戶單擊另一個元素時才觸發事件。如果用戶專注於選擇,然後在沒有選擇選項的情況下點擊離開,這也可能會令人討厭,在這種情況下,我不希望事件被觸發。

我可以通過給予每個選項onmouseup處理程序來獲得一些成功,但是這隻能在Firefox中起作用,據我所知。有任何想法嗎?

+0

不' onclick工作? – Barmar 2013-04-11 03:56:45

+0

@Barmar - 不,我猜想只有Firefox支持'option'元素的點擊事件。不過,我會提到,我還沒有在IE中測試過這些。 – 2013-04-11 04:05:22

+1

一個醜陋的解決方案是每當'onfocus'時都使'selectedIndex = -1',所以你可以安全地聽'onchange'。這對鍵盤用戶來說會很煩人,但如果你認爲你的客戶不關心他們之前選擇的內容,這可能值得一試。 – Passerby 2013-04-11 04:15:09

回答

2

因爲沒有人一直困擾着回答這個問題,我會後我的代碼的通用版本:

<select id="mySelect" onfocus="this.selectedIndex=0;" onchange="userDidSomething(event)"> 
    <option>Choose one:</option> 
    <option>Option 1</option> 
    <option>Option 2</option> 
</select> 

中的JavaScript:

function userDidSomething(event) { 
    // Your Code Here. 
} 
+0

如果javascript未打開,這將停止加載瀏覽器。我認爲你可以像這樣使用onChange: '''var s = document.getElementById(「mySelect」); s.attachEvent(「onchange」,function(){ // function here });''' – 2014-12-09 11:38:47

1

嘗試使用

var s = document.getElementById("mySelect"); 
s.attachEvent("onchange", function() { 
    // function here 
}); 
+3

他說,他不想'onchange' – 2014-06-02 10:25:24

+0

我的道歉。事件監聽器不可能嗎?可能不會,如果麻煩是舊的Internet Explorer。 – jonlastthelast 2014-06-02 10:49:28