我必须获取所选选项的ID。
这种方式总是返回第一个id,它返回“ 1”:
function myFunction() {
var skills = document.getElementById('toto');
var skillId = skills.getAttribute('data-id');
console.log(skillId);
}
<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
<datalist id='skills'>
<select>
<option id="toto" data-id="1">HTML</option>
<option id="toto" data-id="2">Jquery</option>
<option id="toto" data-id="3">CSS</option>
</select>
</datalist>
</label>
<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>
这种方法不起作用,它返回“ null”:
<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
<datalist id='skills'>
<select>
<div id="toto">
<option data-id="1">HTML</option>
<option data-id="2">Jquery</option>
<option data-id="3">CSS</option>
</div>
</select>
</datalist>
</label>
<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>
<script>
function myFunction(){
var skills = document.getElementById('toto');
var skillId = skills.getAttribute('data-id');
console.log(skillId);
}
</script>
以下方法也不起作用:
...
<datalist id='skills'>
...
<script>
function myFunction(){
var skills = document.getElementById('skills');
var skillId = skills.getAttribute('data-id');
console.log(skillId);
}
</script>
如果我将ID放在上,它也不会起作用。
getAttribute()
方法不可避免地与<div></div>
方法相同getElementById()
?
我只想了解正确的功能。
还有另一种没有数据列表的方法吗?因为“ Internet Explorer 9和更早版本或Safari不支持datalist标记。”
非常感谢:)
答案 0 :(得分:3)
您可以使用filter()
和map()
通过匹配文本来获得选项:
function myFunction(){
var skills = document.getElementById('inputTest');
var allOption = [].slice.call(document.querySelectorAll('#skills option'));
var selected = allOption.filter(o => o.textContent == skills.value).map(el => el.getAttribute('data-id'))[0];
console.log(selected);
}
<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
<datalist id='skills'>
<option data-id="1">HTML</option>
<option data-id="2">Jquery</option>
<option data-id="3">CSS</option>
</datalist>
</label>
<button type="button" id="button1" onclick="myFunction()"> Clickhere </button>
答案 1 :(得分:1)
@Mamun,它就像一种魅力一样,顺便说一句,我找到了另一种使用Jquery做到这一点的方法:
$(document).ready(function() {
$('#button1').click(function()
{
var value = $('#inputTest').val();
console.log(($('#skills [value="' + value + '"]').data('value')));
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label>
Skills :
<input id="inputTest" name='skill' list='skills'>
<datalist id='skills'>
<option value="HTML" data-value="1"></option>
<option value="CSS" data-value="2"></option>
<option value="Jquery" data-value="3"></option>
<option value="Java" data-value="4"></option>
</datalist>
</label>
<button type="button" id="button1"> Clickhere </button>
我希望它也会对您有所帮助。