自动从数组填充HTML表单

3

目标:使用 document.getElementById 和纯javascript,在页面加载时自动填充表单。

我有一个数组传递到下面的函数,它会正确地将其添加到html脚本中。

 function showResults(results) {
     var s = "";
     for (var i=0, il=results.features.length; i<il; i++) {
         var featureAttributes = results.features[i].attributes;

         for (att in featureAttributes) {
             s = s + "<b>" + att + ":</b>  " + featureAttributes[att] + "<br />";
             // var subshed = feature[0].attributes["SubWS"];

         }
     }
     dojo.byId("info").innerHTML = s;
 }

结果如下:
对象ID: 190
项目类型: 雨水治理改造
单位: 下部
子水系: sadd

然而,我需要修改脚本以填写现有表格。

document.getElementById(att).value = featureAttributes[att]; 

我总是似乎会覆盖最终输出,所以我只填写一个表单值。 我该如何填写多个值?

更新:Polywhirl先生说得对。 我还不得不添加一个if语句来处理空属性值。 最终代码如下:

 function showResults(results) {
            var subshed = results.features[0].attributes["SubWS"];
            //OBJECTID = results.features[0].attributes["OBJECTID"];
document.getElementById("searchString").value = subshed;
                console.log("feature", results.features[0].attributes["SubWS"])
console.log(document.getElementById("Map_ID"));
        var s = "";
    for (var i = 0, il = results.features.length; i < il; i++) {
          var featureAttributes = results.features[i].attributes;
          for (att in featureAttributes) {
        // s = s + "<b>" + att + ":</b>  " + featureAttributes[att] + "<br />";
  //         var subshed = feature[0].attributes["SubWS"];

                //    document.getElementById(att).value = featureAttributes[att];
  if(!!featureAttributes[att]&&!!document.getElementById(att)){
                    document.getElementById(att).value = featureAttributes[att];


}else{

//alert(att + "this is null")

}
          }

        }

     //   dojo.byId("info").innerHTML = s;
      }

你能展示你正在使用的确切代码吗? - Ricardo Rodrigues
att被分配为id的位置在哪里? - Tamar
2
这是你要找的吗?http://jsfiddle.net/w6Zam/8/ - Mr. Polywhirl
1个回答

0

看起来你的表单有一些嵌套数据源。

我为你制作了两个示例,解析JS对象,你可以使用在所有最新浏览器中支持的JSON.parse(jsonString)方法获得,而旧版本可以自由使用在线提供的JSON2.js polyfill。

在第一个案例中,我使用了一个名为angularJS的MVx框架来说明其使用方法,

我做得相当不优雅,但对于初学者来说相当容易理解。

控制器:

function FormData($scope) {
    $scope.data = {
        OBJECTID: 190,
        ProjectTyp: "Stormwater Retrofit",
        Unit: "Lower",
        SubWS: "sadd"
    };
}

视图的一部分

<form action="path/to/your/action/svc" method="post" ng-controller="FormData">
    <div>
        <label>OBJECTID:</label>
        <input type="text" value="{{data.OBJECTID}}" />
    </div>

在同一个 fiddle 上的第二个例子使用纯 JS 来填充表单,将 JSON.parse(d) 对象转换为数组并映射到表单中。

对象转数组:

function objectToArray(obj) {
    var arr =[];
    for(x in obj) {
        arr.push(obj[x]);
    }
      return arr;
}

var dataArr = objectToArray(data);

人口:

var form = document.getElementById("myForm");
var formItems = form.getElementsByTagName("input");
for(x in formItems) {
    if(formItems[x].type == "text") {
         formItems[x].value = dataArr[x];
    }
}

这里可以找到小提琴链接

希望能有所帮助,

Mike。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接