下面的代码返回'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>

当前回答

这对我很有用

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

还有剧本

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

其他回答

$('#foo option:selected').data('id');

香草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>

还有剧本

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

试试下面的方法:

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

您的更改订阅者订阅了选择的更改事件,因此this参数是选择元素。您需要找到要从中获取数据id的选定子节点。

 alert($(this).first().data('id'));