我遇到这样的问题 Convert an HTML form field to a JSON object with inner objects但朝另一个方向。
这是来自服务器的 JSON 对象响应:
{
company : "ACME, INC.",
contact : {
firstname : "Daffy",
lastname : "Duck"
}
}
这是 HTML 表单:
<form id="myform">
Company: <input type="text" name="company" />
First Name: <input type="text" name="contact.firstname" />
Last Name: <input type="text" name="contact.lastname" />
</form>
这是(伪)代码:
var aFormFields;
for (var i = 0, iMax = aFormFields.length; i < iMax; i++) {
var sFieldName = aFormFields[i].getAttribute('name');
eval("sFieldValue = oResponse."+sFieldName);
}
好吧,我的解决方案有效,但我正在寻找一种从代码中删除邪恶评估的好方法。 该解决方案还应该适用于字段名称中包含任意点数的表单字段。
最佳答案
而不是:
eval("sFieldValue = oResponse."+sFieldName);
用于单点字段:
sFieldValue = oResponse[sFieldName];
这将通过其键检索值。
现在,如果您需要更多,则需要执行以下操作:
- 在
上拆分
sFieldName
。 - 循环该数组并进入
oResponse
直到达到您想要的值
代码可能如下所示:
var node = oResponse, parts = sFieldName.split('.');
while(parts.length > 0) {
node = node[parts.shift()];
}
// node will now have the desired value
有关“成员(member)运营商”的更多信息:
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Member_Operators
关于javascript - 通过 HTML 表单字段名称获取具有内部对象的 JSON 对象的值,无需 eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4246782/