2012-02-13 100 views
0

這裏是我的代碼:如何將事件處理程序綁定到<option>

$(".multiple").each(function() { 
     $(this).bind("mousedown",function() { 
      alert(); 
     }); 
    }); 

這裏是它適用於HTML:

<select> 
<option value = "textbox">TextBox</option> 
<option class = "multiple" value = "multiplechoice">MultipleChoice</option> 
<option class = "multiple" value = "dropdown">DropDown</option> 
</select> 

我希望看到某種警告框,但它似乎不起作用。我怎樣才能解決這個問題?

+0

'alert();'沒有顯示任何內容,因爲第一個參數是**必需**。指定任何參數以使其起作用。即使'void 0'也能完成這項工作。我通常使用'alert(0)'進行快速調試。 – 2012-02-13 23:00:13

回答

3

我不確定您是否可以將事件綁定到option元素,因爲它們是由瀏覽器繪製的,屬於shadow DOM(我認爲)。 It doesn't work for me at least in Chrome 17

你可以,但是,這樣做...

$('select').change(function() { 
    alert('Selected is ' + $(this).find('option:selected').text()); 
}); 

jsFiddle

+0

這裏存在問題...當用戶點擊已經選擇的選項時,事件不會觸發 – 2012-02-13 22:53:35

0

這樣的事情可能嗎?

$('.multiple').change(function(){ 
    alert('something'); 
    }); 

HTML:

<select class="multiple"> 
<option value = "textbox">TextBox</option> 
<option value = "multiplechoice">MultipleChoice</option> 
<option value = "dropdown">DropDown</option> 
</select> 
+0

那裏有問題...當用戶點擊已經選擇的選項時,事件不會觸發 – 2012-02-13 22:54:51

0

不要去那裏 - 從經驗。這不是一個跨瀏覽器解決方案。 我的建議是,在select的「change」事件中,測試當前選擇的選項是否具有「multiple」類,如果是,則運行特定的邏輯。

+0

這裏有一個問題...當用戶點擊已經選擇的選項時,事件不會觸發 – 2012-02-13 22:54:39

+0

因此,只有在srcElement是選項標記時,他才能註冊以單擊選擇並右鍵單擊相同的邏輯(而不是的變化)。 – nadavy 2012-02-14 00:00:28

+0

我們會,我的壞。在所有情況下,「select」都是srcElement。但是,您可以將此小提琴視爲解決方案。我所做的是註冊點擊事件,現在我可以控制部分邏輯,如果這些值發生了變化,而其他部分則沒有。基本上,我們有充分的控制: http://jsfiddle.net/am4ca/ – nadavy 2012-02-14 00:10:15

0

你可以在選擇捕捉事件,並通過選項類過濾它

$('select').change(function() { 
    var o = $(this).find('option:selected'); 
    if ('multiple' != o.attr('class')) { 
     return; 
    } 
    alert('Clicked: ' + o.text()); 
}); 

你也可以使用click()而不是change()得到不導致變化的點擊,但你會得到也會將選擇下降的點擊,也就是說,如果您的選擇是size="1"。這種方法需要您的事件處理程序來解決誤報,因此不鼓勵。

相關問題