Ответ 1
Вам нужно найти выбранную опцию:
$(this).find(':selected').data('id')
или
$(this).find(':selected').attr('data-id')
хотя предпочтительным является первый метод.
Следующий код возвращает 'undefined'...
$('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>
Вам нужно найти выбранную опцию:
$(this).find(':selected').data('id')
или
$(this).find(':selected').attr('data-id')
хотя предпочтительным является первый метод.
Попробуйте следующее:
$('select').change(function(){
alert($(this).children('option:selected').data('id'));
});
Ваш абонент изменений подписывается на событие изменения выбора, поэтому параметр this
является элементом выбора. Вам нужно найти выбранного дочернего элемента, чтобы получить идентификатор данных.
document.querySelector('select').onchange = function(){
alert(this.selectedOptions[0].getAttribute('data-attr'));
};
Vanilla Javascript:
this.querySelector(':checked').getAttribute('data-id')
это работает для меня
<select class="form-control" id="foo">
<option value="first" data-id="1">first</option>
<option value="second" data-id="2">second</option>
</select>
и script
$('#foo').on("change",function(){
var dataid = $("#foo option:selected").attr('data-id');
alert(dataid)
});