dataset.value returning“;[对象对象]”;而不是JavaScript中的实际对象
我试图为从控制器传递到DOM的select from对象动态创建选项。作为选项的一部分,我需要将这些对象的属性作为数据值传递。我可以构建select fine,但无法正确构建dataset.value。目前,我的代码是:dataset.value returning“;[对象对象]”;而不是JavaScript中的实际对象,javascript,object,Javascript,Object,我试图为从控制器传递到DOM的select from对象动态创建选项。作为选项的一部分,我需要将这些对象的属性作为数据值传递。我可以构建select fine,但无法正确构建dataset.value。目前,我的代码是: select.name = "indicator_id_option_" + count; select.id = "indicator_" + count; select.setAttribute("onchange", "if (typeof(this.selectedIn
select.name = "indicator_id_option_" + count;
select.id = "indicator_" + count;
select.setAttribute("onchange", "if (typeof(this.selectedIndex) != '--'){ addNewSelect(this)}");
indicators.forEach(function(indicator){
var optionToAppend = document.createElement('option');
optionToAppend.text = indicator.pk;
var dataVal = {"id": indicator.pk, "timePeriod": indicator.fields.time_period};
optionToAppend.dataset.value = Object.assign({}, dataVal);
console.log(optionToAppend.dataset.value);
select.appendChild(optionToAppend);
});
Indicators
是一个对象对象,我可以通过fine进行迭代,并且可以毫无问题地调用的属性。构建选项时,选项文本正确显示(指示器.pk),但数据值显示为[object]
。当console.log
记录dataset.value
时,我得到[object object]
,当记录JSON.stringify(dataset.value)
时,我得到“[object object]”
。当我注销dataVal
时,我得到了可以访问-对象{id:92235,timePeriod:“annual”}
属性的实际对象。我已经尝试了直接赋值-optionToAppend.dataset.value=dataVal
,上面的选项没有正确创建对象。有什么指导吗?当您设置optionAppend.dataset.value
将对象隐式转换为字符串时,会出现问题
您可以通过使用将对象转换为JSON字符串来解决此问题:
optionToAppend.dataset.value = JSON.stringify(dataVal);
>有什么指导吗?在DOM属性中有许多getter/setter函数,它们强制转换类型和/或值。在当前情况下,通过设计
数据集
对象,值
被强制为字符串。DOM模型允许您将自定义标记添加到对象中,并且由于它没有被冻结,您可以轻松地将目标属性附加到自然对象中。optionToAppend.dataset.value=JSON.stringify(dataVal)代码>?@johankarsson-这似乎奏效了!非常感谢。我将JSON分配给一个数据集值,这也修复了它,当您想要取回它时,只需执行JSON.parse(optionToAppend.dataset.value)