2011-12-01 10 views
183

el siguiente código devuelve 'indefinido' ...seleccione el cambio, obtienen los datos de valor de atributo

$('select').change(function(){ 
    alert($(this).data('id')); 
}); 

<select> 
    <option data-id="1">one</option> 
    <option data-id="2">two</option> 
    <option data-id="3">three</option> 
</select> 
+0

¿Es mejor usar $ (this) .find (': selected') o $ (this) .children ('option: selected')? – ofko

+1

Consulte esta pregunta: http://stackoverflow.com/questions/648004/what-is-fastest-children-or-find-in-jquery –

Respuesta

420

es necesario encontrar la opción seleccionada:

$(this).find(':selected').data('id') 

o

$(this).find(':selected').attr('data-id') 

aunque se prefiere el primer método.

+0

utilicé por error attr() en mi publicación inicial, quise decir data() pero vuelve 'indefinido' para mí. – ofko

+0

Ver mi edición - necesita encontrar la opción seleccionada en el yep –

+0

que funciona, gracias. – ofko

25

intente lo siguiente:

$('select').change(function(){ 
    alert($(this).children('option:selected').data('id')); 
}); 

Su cambio de abonado se suscribe al evento de cambio de la selección, por lo que el parámetro this es el elemento select. Necesitas encontrar el niño seleccionado para obtener el ID de datos.

+0

esto también funciona, gracias. – ofko

+0

A partir de 2016 'find()' es mucho más rápido que 'children()' incluso en casos como este, donde solo tenemos una profundidad de árbol de 2. – Hafenkranich

2

JavaScript básico:

this.querySelector(':checked').getAttribute('data-id') 
+1

Working for Me. –

4
document.querySelector('select').onchange = function(){ 
    alert(this.selectedOptions[0].getAttribute('data-attr')); 
}; 
0

esto funciona para mí

<select class="form-control" id="foo"> 
    <option value="first" data-id="1">first</option> 
    <option value="second" data-id="2">second</option> 
</select> 

y el guión

$('#foo').on("change",function(){ 
    var dataid = $("#foo option:selected").attr('data-id'); 
    alert(dataid) 
}); 
0
$('#foo option:selected').data('id'); 
0

probar esto:

$('select').change(function(){ 
    alert($(this).val()); 
}); 

<select> 
    <option value="1">one</option> 
    <option value="2">two</option> 
    <option value="3">three</option> 
</select> 
Cuestiones relacionadas