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

当前回答

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

其他回答

您需要找到所选的选项:

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

or

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

尽管第一种方法更可取。

香草Javascript:

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

也许是一种更优雅的方式

$('option:selected', this).data('id')
document.querySelector('select').onchange = function(){   
   alert(this.selectedOptions[0].getAttribute('data-attr')); 
};
$('#foo option:selected').data('id');