4

すでに選択されているオプションが再度選択されたときにイベントをトリガーしようとしています。さまざまなクリック機能とトリガー機能を試しましたが、何もしませんでした。助けてください。

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');
    }
});
4

2 に答える 2

2

私が通常行うのは$("#mySelect").trigger('change')、ユーザーがコードを現在の値に変更したかのようにコードを呼び出す呼び出しです

于 2012-04-24T16:20:08.777 に答える
2

ネイティブの選択メニューを使用すると、すぐに問題が発生します。ただし、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属性をチェックして要素が既に選択されているかどうかを確認することです。この値は、j​​Query Mobile によって自動的に更新されます。

#mySelect-menuは、jQuery Mobile 選択メニューのカスタム選択メニュー インターフェイスとして作成される UL 要素であることに注意してください。vmousedownまた、マウス イベントとタッチ イベントの操作に役立つカスタム jQuery Mobile イベントであることに注意してください。vmousedownselect の値が変更される前に起動するため、選択したので、ed 要素が既に選択されているかどうかを確認できますclick

また、非ネイティブの選択ウィジェットを強制するには、次の属性を SELECT タグに追加しますdata-native-menu="false"

于 2012-04-24T16:14:08.090 に答える