2011-12-01 65 views
183

下面的代碼返回 '未定義' ......在選擇的變化,得到的數據屬性值

$('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

使用$(this).find(':selected')或$(this).children('option:selected')是更好嗎? – ofko

+1

看到這個問題:http://stackoverflow.com/questions/648004/what-is-fastest-children-or-find-in-jquery –

回答

420

你需要找到所選擇的選項:

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

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

儘管第一種方法是優選的。

+0

我錯誤地使用attr()在我的初始職位,我的意思是數據()但它會爲我返回'undefined'。 – ofko

+0

看到我的編輯 - 需要找到選擇 –

+0

yep那個工作,選擇選項,謝謝。 – ofko

25

嘗試以下操作:

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

你改變用戶簽約的選擇的變化情況,因此this參數是選擇元素。您需要找到所選的孩子以從中獲取數據ID。

+0

這個作品。 – ofko

+0

從2016年開始,find()比'children()'快得多,即使在像這樣的情況下,我們只有樹深度爲2. – Hafenkranich

2

香草的Javascript:

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

Working for Me。 –

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

這對我的作品

<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) 
}); 
0
$('#foo option:selected').data('id'); 
0

試試這個:

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

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