纯 JS 获取所选选项数据属性值返回 Null
PURE JS get selected option data attribute value returns Null
我有这个html:
<select onchange="check_status(this);" name="status[171]">
<option selected="true" value="open" data="04f2cf35e4d7a1c0158459fd0450a605">open</option>
<option value="in_process" data="04f2cf35e4d7a1c0158459fd0450a605">pending</option>
<option value="finished" data="04f2cf35e4d7a1c0158459fd0450a605">finished</option>
<option value="canceled" data="04f2cf35e4d7a1c0158459fd0450a605">canceled</option>
</select>
和 js
function check_status(obj){
var uid = obj.getAttribute('data');
alert(uid);
}
但它总是提醒空而不是数据值问题出在哪里?谢谢
问题是你得到选择元素而不是选定的选项元素作为函数参数。而且它没有data
属性。您必须像这样获取选项属性:
function check_status(obj) {
var uid = obj.options[obj.selectedIndex].getAttribute('data-uid');
alert(uid);
}
<select onchange="check_status(this);" name="status[171]">
<option selected="true" value="open" data-uid="01f2cf35e4d7a1c0158459fd0450a601">open</option>
<option value="in_process" data-uid="02f2cf35e4d7a1c0158459fd0450a602">pending</option>
<option value="finished" data-uid="03f2cf35e4d7a1c0158459fd0450a603">finished</option>
<option value="canceled" data-uid="04f2cf35e4d7a1c0158459fd0450a604">canceled</option>
</select>
请注意,我将属性名称更改为 data-uid
,以便根据 HTML5 规范使其有效。
您正在尝试获取选择数据属性,而不是选项。
另外,我可以看到您data
的所有属性都是相同的。然后,您可以将其从选项中移动到选择自身:<select onchange="check_status(this);" name="status[171]" data="04f2cf35e4d7a1c0158459fd0450a605" >
并使用从您的问题中截取的代码,未经修改。
function check_status(obj) {
var uid = obj.options[obj.selectedIndex].getAttribute('data');
alert(uid)
}
<select onchange="check_status(this);" name="status[171]">
<option selected="true" value="open" data="open04f2cf35e4d7a1c0158459fd0450a605">open</option>
<option value="in_process" data="pending104f2cf35e4d7a1c0158459fd0450a605">pending</option>
<option value="finished" data="finished04f2cf35e4d7a1c0158459fd0450a605">finished</option>
<option value="canceled" data="canceled04f2cf35e4d7a1c0158459fd0450a605">canceled</option>
</select>
您可以使用"data"属性定义自定义属性。在您的代码中,没有自定义属性,我确定您希望它是一个 ID。确切的格式为 "data-*"
,其中 "*"
将替换为所需的自定义属性名称,然后设置为所需的字符串值。因此,在您的代码中,理想情况下它应该是:
<select onchange="check_status(this);" name="status[171]">
<option selected="true" value="open" data-id="open04f2cf35e4d7a1c0158459fd0450a605">open</option>
<option value="in_process" data-id="pending104f2cf35e4d7a1c0158459fd0450a605">pending</option>
<option value="finished" data-id="finished04f2cf35e4d7a1c0158459fd0450a605">finished</option>
<option value="canceled" data-id="canceled04f2cf35e4d7a1c0158459fd0450a605">canceled</option>
</select>
假设您希望自定义属性为"id"。
有两种方法可以使用纯JavaScript检索"data"属性的值:除了老式的get/setAttribute()之外,您还可以使用元素的"dataset"属性进行访问。
使用 DOM 的 getAttribute() 属性
function check_status(obj) {
var myoption = obj.options[obj.selectedIndex];
var uid = myoption.getAttribute('data');
alert(uid);
// setting and removing the data-id attribute
myoption.setAttribute("data-id", "foo") //changes "data-id" to "foo"
myoption.removeAttribute("data-id") //removes "data-id" attribute entirely
}
使用 JavaScript 的数据集属性
function check_status(obj) {
var myoption = obj.options[obj.selectedIndex];
var uid = myoption.dataset.id;
alert(uid);
var statusId = myoption.dataset["id"]
alert(statusId);
}
function check_status(obj){
var uid = obj.options[obj.selectedIndex].getAttribute('data');
alert(uid);
}
相关文章:
- 序列化数据属性中对象的最可靠方法
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- jQuery最近父级的数据属性选择器
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 数据属性仅在切换设备模式下工作
- 函数jquery.html()不提供数据属性集值
- JavaScript-获取数据属性的值返回未定义的值
- jQuery没有't返回新的数据属性
- 纯 JS 获取所选选项数据属性值返回 Null
- happy 不会从 Boom 错误返回数据属性
- Facebook 在发布“打开图”操作时返回空数据属性
- 如何使用 javascript 返回数据属性数组
- 除非访问了数据属性,否则Blaze.getData(el)将返回null
- 当我使用.pr()查找自定义数据属性时,为什么jQuery返回undefined
- js查找从webapi控制器返回的第一个数据属性的模型
- 为什么从ASP返回数据?.d属性内的.NET页面方法
- 如何从数据值属性返回负值?
- 对于多个请求,jQuery数据属性的返回方式不同
- JQuery正在获取返回未定义的数据属性
- JavaScript在尝试获取数据属性时返回NULL/Undefined