javascript - 通过 HTML 表单字段名称获取具有内部对象的 JSON 对象的值,无需 eval

标签 javascript json object eval forms

我遇到这样的问题 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];

这将通过其键检索值。

现在,如果您需要更多,则需要执行以下操作:

  1. 上拆分 sFieldName
  2. 循环该数组并进入 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/

相关文章:

javascript - 如何使用 javascript/css 浏览纯 c​​ss 轮播/幻灯片?

json - Golang 中的语法错误

php - 转换 Javascript 关联对象并在 PHP 中输​​出

javascript - 动态创建对象实例的约定是什么?

php - 当分配不同的变量时,DateTime 对象正在更改

JavaScript 事件,不更新 knockout 可观察/模型值

javascript - 使用 D3.js 只渲染 topojson map 的一部分

javascript - 单击按钮时更改按钮的图像背景

jquery - IE 上的 $.getJSON 问题

javascript - 多个 View 上的 Angular ng-model