2012-05-03 3 views
5

Ho un multi selezionare discesa ad esempio:Get opzione cliccato in discesa multipla

<select id="myList" multiple="multiple"> 
    <option value="1">Opt #1</option> 
    <option value="2" selected="selected">Opt #2</option> 
    <option value="3" selected="selected">Opt #3</option> 
    <option value="4">Opt #4</option> 
</select> 

Se dunque io seleziona Opt #4, come faccio poi solo ottenere Opt #4 e non Opt #2 e Opt #3? So che posso ottenere tutte le opzioni selezionate da questo:

var selectedOptions = $("#myList option:selected"); 

Tuttavia voglio solo l'opzione ho cliccato - Opt #4. È possibile?

Modifica: si noti che mentre gestisco l'elenco all'interno di un evento change non riesco a farlo in un evento click. Aggiunti anche multipli mancanti.

+0

Cosa vuoi raggiungere? Se vuoi ottenere l'opzione "cliccata", perché è una selezione multipla? – MatuDuke

+2

Ti è mancato aggiungere l'attributo 'multiple' per selezionare il tag? –

+0

Hai perso l'attributo 'multiplo =" multiplo "dal tuo' select'. Oltre a questo dovrebbe funzionare. – phuzi

risposta

7

È possibile ottenere nel gestore click per ogni elemento opzione:

$("#myList option").click(function() { 
    var clickedOption = $(this); 
}); 

Aggiornamento

EDIT: Come ho manipolare la lista all'interno di un evento di modifica, posso Fallo in un evento click.

In tal caso è necessario delegare l'evento utilizzando on. Prova questo:

$("#myList").on("click", "option", function() { 
    var clickedOption = $(this); 
}); 
+0

Questo aggiungerà un singolo gestore di eventi a ciascuna opzione. Se hai mai aggiunto delle opzioni dopo aver chiamato questo, le nuove opzioni non funzioneranno come previsto. Si prega di guardare la mia soluzione su come evitare questo problema. –

+0

Ho dimenticato di menzionare che manipolo la lista all'interno di un evento di modifica, quindi non posso farlo in un evento click. – Frets

+0

@Frets nessun problema, controlla il mio aggiornamento. –

1

Come sapete, se l'utente ha fatto clic su opt # 4 senza premere il tasto Cntrl, otterrete solo Opt # 4 come opzione selezionata.

Se l'utente ha fatto clic su opt # 4 con il tasto Cntrl premuto, quindi tutte e tre le opzioni saranno selezionate. Quindi tutte e tre le opzioni saranno restituite. Se si desidera solo opt # 4, è necessario aggiungere un gestore di eventi click.

1

Qualcosa di simile al seguente ti può aiutare?

$('#myList').delegate('option', 'click', function (opt) { 
    alert('Option ' + opt.value + ' was clicked'); 
});