10

我试图注销我在选择框中附加到每个选项的数据属性但没有成功,我是否正确使用 .on('change'... 或者我应该怎么做才能实现这一点?

JS

$('select').children().on('change', function(e){
    console.log( $(this).data('id') );
    e.preventDefault();
});

HTML

<select>
<option value="1" data-id="option1">wgwg</option>
<option value="1" data-id="option2">wgwerg</option>
<option value="1" data-id="option3">wgwg</option>
<option value="1" data-id="option4">wgr</option>
</select>​
4

4 回答 4

21

更改事件 onoption并没有真正意义,因为option没有更改。该事件应在select.

$('select').on('change', function(e){ 
    console.log( $(this).find("option:selected").data('id') ); 
    e.preventDefault(); 
}); 
于 2012-10-11T16:52:40.573 回答
2

尝试这个,

现场演示

$('select').on('change', function(e){
    console.log( $('option:selected', this).data('id'));
    e.preventDefault();
});
于 2012-10-11T16:51:02.840 回答
2

你可以使用Vanilla Javascript

console.log(this.querySelector(':checked').getAttribute('data-id'))
于 2016-11-29T12:23:00.523 回答
1

您似乎将事件分配给 select 的孩子这是错误的..您需要将事件直接分配给 select ..

this 没有data属性。它是option that is selected..所以把你的代码改成这个

尝试这个

 $('select').on('change', function(e){
        console.log( $(this).find('option:selected').attr('data-id') );
    }).change();

或者

$('select').on('change', function(e){
            console.log( $(this).find('option:selected').data('id') );
        }).change();
于 2012-10-11T16:51:50.937 回答