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

})

ev.targetは常に、selectではありませんoption

どれが現在クリックされているかを知るにはどうすればよいですか?

これをするように言わないでください:

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

})

IE8 ではサポートされていないため、自分でテストできます。

編集

contextmenuまた、イベントを発生させる右クリックもサポートする必要があります

4

6 に答える 6

1

選択ボックスに change イベントを使用すると、以下を使用して現在選択されている項目を見つけることができます。

$("#sel").change ( function() {
    alert ( $(this).find("option:selected").val() );
});
于 2009-12-09T12:14:10.290 に答える
1

<option>IE でイベントをキャッチできません。それ自体には独立した生命はありません。選択ボックスは、IE では分割できない 1 つの OS ウィジェットであるため、オプションをクリックすると常に<select>要素のクリック イベントが生成されます。

プロパティからどのオプションがクリックされたかを理論的に推測することもできますがevent.clientY、そのためには、IE がどのようにメニューをレンダリングしたかを正確に知る必要があります。これには、使用されているフォント (コントロール内である程度) や、ポップアップ メニューがポップアップしたかどうかなども含まれます。下向きまたは上向きに動かしたり、画面の端にぶつかったりして、select 要素に対して位置合わせがずれています (まったく制御範囲内ではありません)。非常に短いメニューの場合、常に下向きに開いてそこから計算することを期待できますが、実際には信頼できません. ほとんどの場合、クリックをそのままにして、後でどのオプションが選択されているかを確認するのが最善です。

oncontextmenu、忘れてください。IE でを右クリック<option>しても何も起こりません。キャッチするイベントはまったく生成されません。右クリック可能なメニューが必要な場合は<select>、JavaScript の div ベースのポップアップ アナログに置き換える必要があります。

于 2009-12-09T12:52:07.903 に答える
0

これは、例としてjqueryのドキュメントからのものです

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

セレクターから/選択済み

于 2009-12-09T12:13:41.257 に答える
0

選択した属性を使用できます。このようなもの:

$("#YourSelect option:selected");
于 2009-12-09T12:15:14.360 に答える
0

解決策は、の新しいものを確認することvalueだと思います。それは、クリックしたばかりのユーザーselectからのものである必要があります。option

またはselectedIndex、 your のプロパティを確認することもできます。これは、選択したばかりの をselect指している必要があります。option

于 2009-12-09T12:12:32.867 に答える
0

select 要素で val() メソッドを使用するだけです。

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

また:

$('select').change(function(ev){
    var value = $(this).val();
})
于 2009-12-09T12:13:02.100 に答える