2009-12-09 27 views
0
$('select').bind('click contextmenu',function(ev){ 

}) 

ev.target始終是select而不是option如何檢查哪個<option>被實際點擊?

我怎麼知道哪一個現在被點擊?

不要告訴我這樣做:

$('option').bind('click contextmenu',function(ev){ 

}) 

,因爲它不是在IE8的支持,你可以自己測試一下吧!

編輯

還應該支持右鍵,這將觸發contextmenu事件

回答

0

我想一個解決辦法可能是檢查selectvalue:它應該是一個來自未來option您的用戶只是點擊了。

或者你也可以檢查你的selectselectedIndex屬性:它也應該指向剛纔選擇的option

+0

我還需要支持右鍵單擊(contextmenu) – user198729 2009-12-09 12:27:33

0

只需使用VAL() - 方法選擇元件上:

$('select').bind('click contextmenu',function(ev){ 
    var value = $(this).val(); 
}) 

OR:

$('select').change(function(ev){ 
    var value = $(this).val(); 
}) 
0

這是從jQuery文檔作爲一個例子

$("select").change(function() { 
      var str = ""; 
      $("select option:selected").each(function() { 
       str += $(this).text() + " "; 
       }); 
      $("div").text(str); 
     }) 
     .trigger('change'); 

Selectors/selected

1

您可以使用選擇框的更改事件,並可以使用以下命令查找當前選定的項目。

$("#sel").change (function() { 
    alert ($(this).find("option:selected").val()); 
}); 
+0

我不認爲點擊右鍵會觸發事件! – user198729 2009-12-09 12:17:05

+0

@ unknown(google)我沒有看到你的問題在哪裏,你說「右鍵點擊」 – 2009-12-09 12:24:28

+0

contextmenu是'右鍵點擊' – user198729 2009-12-09 12:26:22

0

您可以使用選定的屬性。類似這樣的:

$("#YourSelect option:selected"); 
1

<option>無法捕捉IE中的事件。它沒有獨立的生活;選擇框在IE中是單個不可分割的操作系統小部件,因此點擊某個選項總是會爲<select>元素生成單擊事件。

雖然理論上你可能會猜到從event.clientY屬性中點擊了哪個選項,但這需要你確切地知道IE如何渲染菜單,包括正在使用的字體(有些在你的控制範圍內)以及流行向上或向上彈出或彈出屏幕邊緣,使其與選擇元素沒有對齊(根本不在您的控制範圍內)。對於非常短的菜單,您可能希望它始終向下打開並從那裏計算,但這並不可靠。幾乎總是最好讓點擊通過,然後看看後面選擇了哪個選項。

至於oncontextmenu,忘記它。在IE中右鍵點擊一個<option>什麼也不做,沒有事件產生,你完全可以捕獲。如果你想要右鍵點擊的菜單,你將不得不用你的<select>替換爲基於JavaScript div的彈出式模擬器。