2012-05-04 27 views
8

Tengo un número de cuadros de selección que se han configurado para aceptar valores múltiples. ¿Hay alguna forma de que pueda usar jQuery para obtener el último valor seleccionado? He intentado utilizar lo siguiente:Obtener el último valor seleccionado del elemento de selección múltiple

var latest_value = $("option:selected",this).val(); 

y no devolvió nada. Solo quiero el último valor seleccionado y no la matriz de valores.

Gracias de antemano

a lo solicitado aquí está el código HTML He cortado la lista de abajo, ya que es demasiado largo:

<select id="style-list" name="style-list[]" class="attrs" multiple="multiple"> 
    <option value="7">2 Pack</option> 
    <option value="10">3 Pack</option> 
    <option value="12">4 Pack</option> 
</select> 

A continuación, en la parte superior de la página que tienen las siguientes (no tengo 8 de ellos, pero me he mostrado algunos de manera que se puede ver que estoy usando varias instancias del widget de selección múltiple:

$(document).ready(function(){ 

    $("#product-list").multiselect({ 
     selectedList: 4, 
     noneSelectedText: "Product", 
     minWidth: 190 
    }).multiselectfilter(); 

    $("#style-list").multiselect({ 
     selectedList: 4, 
     noneSelectedText: "Style", 
     minWidth: 190 
    }).multiselectfilter(); 


    $("#feature-list").multiselect({ 
     selectedList: 4, 
     noneSelectedText: "Features", 
     minWidth: 190 
    }).multiselectfilter(); 

}); 

y luego tengo esto en un archivo separado JS:

$(function(){ 

    $(".attrs").on("multiselectclick", function(event, ui){ 

    var latest_value = $('option', this).filter(':selected:last').val(); 
    alert (latest_value); 

    var view = $("#currentview").val(); 
    var page = 1; 

    run_ajax(view,page); 

    }); 

}) 

Gracias

+0

Si usted está buscando el * la opción * seleccionada más recientemente en lugar de la opción seleccionada que aparece al final de la lista, ver http://stackoverflow.com/questions/8149532/how-to-get-the-last-selected-option-from-a-multiselect/ . – Noumenon

Respuesta

14

Utilice el selector de :last:

var latest_value = $("option:selected:last",this).val(); 

Se puede ser que this en el contexto de la función de devolución de llamada no se refiere al elemento <select> sí mismo, pero en su lugar a un elemento dentro de él, intente lo siguiente:

var latest_value = 
$(this).closest('select').find('option').filter(':selected:last').val(); 

También puede valer la pena llamar al console.log(this); dentro de la función de devolución de llamada, para que sepa con qué elemento está trabajando en realidad.

+1

+1, sin embargo, sugeriría usar '.filter()' con pseudo-clases por razones de rendimiento. 'var latest_value = $ ('option', this) .filter (': selected: last'). Val();' – jaredhoyt

+0

Gracias por su respuesta, pero ninguna sugerencia funcionó. Obtengo el valor indefinido – Amara

+0

@Amara En ese caso, necesitaremos un poco más de información en la pregunta; parece que el selector original que tenía también es incorrecto. ¿Puede incluir el HTML relevante (HTML real, no el código del lado del servidor que lo genera) y el Javascript que llama a esa línea de código? –

3

uso de la última función: como esto

$("#style-list option:selected").last().val() 
3

Este es el código para obtener la última opción seleccionada de lista de selección múltiple usando jQuery:

var selected; 
$(document).ready(function() { 
$('#SELECT_ID').on('click', function() { 
var latestSelected; 
if (selected) { 
    var currentOptionsValue = $(this).val(); 
    latestSelected = currentOptionsValue.filter(function(element) { 
    return selected.indexOf(element) < 0; 
    }); 
} 
selected = $(this).val(); 
console.log("latest selected option : " + latestSelected); 
}); 
}); 
+0

Hola, Mahak, tu respuesta funciona bien. Necesito encontrar el último valor no seleccionado? –

Cuestiones relacionadas