预期结果:仅使用document.getElementById
自动填写表单。
我有一个传递给以下函数的数组,它正确地将它添加到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;
}
结果如下
OBJECTID: 190 ProjectTyp: Stormwater Retrofit Unit: Lower SubWS: sadd
但是,我需要修改脚本以使用
填写现有表单document.getElementById(att).value = featureAttributes[att];
我似乎总是覆盖最终输出,所以我只填写一个表单值。如何填写多个值?
更新:Polywhirl先生做对了。我还必须添加一个if语句来处理null属性值。最终的代码是:
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;
}
答案 0 :(得分: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>
同一个小提琴上的第二个例子使用plain(vanilla)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];
}
}
可以找到小提琴here
希望它有所帮助,
麦克