1

我正在尝试根据检索到的 JSON 对象填充我的输入字段。我的表单中的字段名称类似于:

  1. 全名
  2. account.enabled
  3. 国家.XXX.XXXX

该函数应为上述字段返回如下内容

  1. 数据[“全名”]
  2. aData["帐户"]["启用"]
  3. aData["国家"]["XXX"]["XXXX"]

我应该如何编写一个返回给定 HTML 字段名称的匹配 JSON 条目的函数?

4

2 回答 2

2

您可以使用附加的方法,该方法将递归地在 JSON 对象中查找给定路径,如果不匹配,将回退到默认值 (def)。

var get = function (model, path, def) {
    path = path || '';
    model = model || {};
    def = typeof def === 'undefined' ? '' : def;
    var parts = path.split('.');
    if (parts.length > 1 && typeof model[parts[0]] === 'object') {
      return get(model[parts[0]], parts.splice(1).join('.'), def);
    } else {
      return model[parts[0]] || def;
    }
  } 

你可以这样称呼它:

get(aData, 'country.XXX.XXXX', ''); //traverse the json object to get the given key
于 2013-09-18T16:45:58.397 回答
1

遍历表单元素,获取它们的名称,在“.”上拆分,然后访问 JSON 对象?

就像是:

var getDataValueForField = function (fieldName, data) {
  var namespaces = fieldName.split('.');
  var value      = "";
  var step       = data;

  for (var i = 0; i < namespaces.length; i++) {
    if (data.hasOwnProperty(namespaces[i])) {
      step = step[namespaces[i]];
      value = step;
    } else {
      return (""); // safe value
    }
  }
  return (value);
};

var populateFormFields = function (formId, data) {
   var fields = document.querySelectorAll('#' + formId + ' input');

   for (var i = 0; i < fields.length; i++) {
     fields[i].value = getDataValueForField(fields[i].name, data);
   }
};

populateFormFields('myForm', fetchedFromSomeWhere());
于 2013-09-18T16:53:19.007 回答