2012-04-24 28 views
4

我試圖觸發一個事件,當已經選擇的選項再次被選中。 我試過不同的點擊和觸發功能,但沒有。請幫忙。jQuery Mobile - 觸發已經選擇的選項

HTML:

<select id="mySelect" name="mySelect"> 
    <option class="mylistitem" value="0" selected="selected">Option 0</option> 
    <option class="mylistitem" value="1">Option 1</option> 
    <option class="mylistitem" value="2">Option 2</option> 
</select>​ 

JS:

$("#mySelect").live("change", function() { 
    alert($("#mySelect").val()); 
}); 

http://jsfiddle.net/pioSko/tcWRP/38/

更新:結合兩個答案;)http://jsfiddle.net/pioSko/tcWRP/60/

$(document).delegate('#mySelect-menu li', 'vmousedown', function (event) { 
    if ($(this).attr('aria-selected') === 'true') { 
     $('#mySelect').trigger('change'); 
    } 
}); 
+0

正如通知,將調用您的代碼:如果您再次選擇相同的選項,瀏覽器將標記爲不變。所以onChange()事件不會被觸發。 – reporter 2012-04-24 13:20:50

+0

我知道,這是我的問題:) – pioSko 2012-04-24 13:21:32

回答

2

如果我們e本地選擇菜單,那麼您將很快遇到問題。但是,如果您使用jQuery Mobile樣式選擇菜單,則可以將事件處理程序綁定到菜單窗口小部件,因爲它是由DIV和SPAN構成的。

$(document).delegate('#mySelect-menu li', 'vmousedown', function (event) { 
    if ($(this).attr('aria-selected') === 'true') { 
     alert('That is already selected.'); 
    } 
});​ 

這裏是一個演示:http://jsfiddle.net/ys8Kh/

的基本思路是跟蹤在「選項」元素的點擊次數(真列表項目)在自定義選擇菜單,並檢查area-selected屬性,看看是否元素已被選中。這個值由jQuery Mobile自動更新。

請注意,#mySelect-menu是作爲jQuery Mobile選擇菜單的自定義選擇菜單界面創建的UL元素。另請注意,vmousedown是一個自定義jQuery Mobile事件,可幫助處理鼠標和觸摸事件。我選擇了vmousedown,因爲它在選擇的值已更改之前觸發,因此我們可以看到是否已選擇click ed元素。

此外,要強制非本機選擇小部件,請將此屬性添加到SELECT標記:data-native-menu="false"

+0

太棒了!謝謝 :) – pioSko 2012-04-24 19:21:27

2

我通常做的是調用$("#mySelect").trigger('change')因爲如果用戶把它改成當前值

相關問題