2013-12-17 77 views
1

我有一個AJAX加載的下拉菜單,它在更改時運行一個函數,但如果點擊了已經選擇的選項,我也希望它運行該函數。 (例如,有人選擇選項一兩次連勝,我希望它運行功能兩次,而不必選擇它們之間的不同選項)連續兩次選擇選項時運行函數

JAVASCRIPT:

$(document).on('change','#dropdown',function(e){ 
    //do stuff 
} 

HTML:

<select id="dropdown"> 
    <option value="optionA">option A</option> 
    <option value="optionB">option B</option> 
    <option value="optionC">option C</option> 
</select> 
+0

你的意思是,運行它,如果他們打開下拉,然後關閉它在不改變他們的選擇? –

+0

然後值不會改變,所以'改變'可能不是你想要的事件。 –

+0

可能的重複[是否有一個DOM事件在HTML select元素關閉時觸發?](http://stackoverflow.com/questions/6207929/is-there-a-dom-event-that-fires-when- -html-select-element-is-closed) – iambriansreed

回答

-2

使用

$(document).on('select','#dropdown',function(e){ 
    //do stuff 
} 

$(document).on('click','#dropdown',function(e){ 
    //do stuff 
} 
+0

-1'.select()'用於選擇文本http://api.jquery.com/select/'.click'在設置值之前觸發 – iambriansreed

+0

我的歉意是,我錯誤地指的是jqxWidget,它會觸發在他們的下拉列表中選擇「事件」。 – jtrumbull

+0

「在設置值之前觸發.click」在本例中無關緊要,因爲該值永遠不需要設置。該示例中指出,該下拉菜單被連續多次點擊。 – jtrumbull

0

它花了一些實驗,但有一種方法可以檢測select的下拉菜單是否被點擊。

移動你的代碼到click事件,環繞它的標籤,如果這樣:

if(event.pageY<0) 
{ 
    // The dropdown menu on the select was clicked! 
} 

只需要此if究其原因,是因爲事實上,這兩個瀏覽器我已經成功要對其進行測試,看起來事件觸發時光標位於實際頁面之外。

你可以在http://jsfiddle.net/Entoarox/ATm43/找到演示。

事件對象的pageY屬性是jQuery爲跨瀏覽器一致性而規範化的屬性之一。

http://api.jquery.com/category/events/event-object/

更換您的change腳本:

$(document).on('click','#dropdown',function(event){ 
    if(event.pageY >= 0) return; // return and don't do anything 
    // The dropdown menu on the select was clicked! 
    // do stuff 
}); 
+0

+1非常好。這也使總體感覺! – iambriansreed

+0

對不起,如果我接管你的答案。關於這個想法,有很多關於SO的問題,但你的答案是我見過的唯一真正有效的答案。所以我希望它儘可能地完整。榮譽。 – iambriansreed

+0

DV的任何原因在這裏? – iambriansreed