2

<select id="direction_X"></select>私のphpスクリプトによって複数生成されています。X はその ID です。そうすることでそれらの要素を選択しようとしています:

$('select[id*="direction_"]').live('change', function() {
     selected = $('select[id*="direction_"] option:selected');
     option_ID = $(selected).val();

     console.log(option_ID);
}

実際、使用すると option_ID が取得されますが、他のものを使用しようとすると、常に同じ option_ID が取得されます。

最初にクリックすると(空の文字列)が表示され、その後にクリックすると最初から正しい ID が表示されます。

4

2 に答える 2

6

this現在の選択要素を参照するキーワードを使用する必要があります。

$('select[id^="direction_"]').on('change', function() {
     var selected = $(this).val(); // this.value
     console.log(selected);
})

livemethod は非推奨であることに注意してください。on代わりに method を使用できます。select 要素が php によって生成される場合、イベント委任を使用する必要はありません。要素がページのロード後に生成される場合、method を使用してイベントを委任する正しい方法は次のとおりonです。 :

$(document).on('change', 'select[id^="direction_"]', function() {

セレクタで始まる属性 | の上

于 2012-12-22T02:01:38.737 に答える
0

選択したすべての値を取得したい場合は、選択したすべての要素を反復処理し、選択したすべてのオプションの配列を作成する必要があります。

この HTML を考えると -

<select id="sel_1">
    <option value="1" selected="selected">1</option>
    ...
</select>
<select id="sel_2">
    <option value="2" selected="selected">2</option>
    ...
</select>
<select id="sel_3">
    ...
    <option value="3" selected="selected">3</option>
</select>

選択したすべての要素を収集するには、次のようにします -

var selValues = $("select[id*='sel'] option:selected").map(function(){
  return $(this).val();
});
console.log(selValues); // ["1", "2", "3"] 

ここに簡単なデモがあります (コンソールを開いてください)

于 2012-12-22T02:10:12.690 に答える