3

select2:selectイベントをリッスンするときにちょうど選択された<option>を保持するにはどうすればよいですか?ただ1つのオプションが選択されたときのように、単一選択を使用しているときにこれが簡単であることに注意してください。また、複数選択(<select multiple>)を使用しているときに選択されたオプションを見つけることもできます。複数のオプションを選択できる場合、Select2イベントで選択されたオプションを取得

select2:unselectイベントでは、選択されていない<option>e.params.data.elementで利用できますが、select2:selectイベントではそうではありません。 <option>が現時点で作成されているため、使用できないようにする理由はありません。ただし、select2:selectingイベントの場合、<option>はまだ作成されておらず、イベントが発生したときには利用できないことは明らかです。

答えて

8

私は(それはバージョン4のためだとアップ)Selectセレクトで選択されている現在の取得するために、以下を使用しました:

// single value 
var test = $('#test'); 
test.on("select2:select", function(event) { 
    var value = $(event.currentTarget).find("option:selected").val(); 
    console.log(value); 
}); 

UPDATEを:マルチ選択した値を(と、最後は選択なし)

// multi values, with last selected 
var old_values = []; 
var test = $("#test"); 
test.on("select2:select", function(event) { 
    var values = []; 
    // copy all option values from selected 
    $(event.currentTarget).find("option:selected").each(function(i, selected){ 
    values[i] = $(selected).text(); 
    }); 
    // doing a diff of old_values gives the new values selected 
    var last = $(values).not(old_values).get(); 
    // update old_values for future use 
    old_values = values; 
    // output values (all current values selected) 
    console.log("selected values: ", values); 
    // output last added value 
    console.log("last added: ", last); 
}); 
+0

これは、選択されたオプションのうち最初のオプションの値を見つけるだけではありませんか?複数のオプションが選択されている場合でも、選択されたオプションを取得したいと考えています。 –

+0

.val();を使用しないことをお勧めします。 – Dennis

+0

はい。ちょうど選択されたオプションを取得するには、選択したすべてのオプションのリストを保持し、どのオプションが選択されているかを確認する必要がありますが、リストにはありません。それとも良いアイデアはありますか? –

関連する問題