我确定我只是遗漏了一些东西,但如果有人知道如何在不调用jquery插件的情况下做到这一点,那将会非常有用。
假设我有一个简单的html表单,如下所示:
<form id="mainform" action="form.php" method="post">
<fieldset>
<legend>Main Form</legend>
<label for="input1">First Input</label>
<input id="input1" name="input1" type="text" />
<label for="input2">First Input</label>
<input id="input2" name="input2" type="text" />
</fieldset>
</form>
我有一个ajax函数,通过jquery,我想填写上面的表格。不仅是值,还有它是只读的,输入的类,以及它是否被禁用。
所以服务器将以json格式将所有这些返回给ajax函数,它应该类似于:
{"input1":{"value":10},"input2":{"value":100,"readonly":"readonly","class":"noinput"}}
是否有一种简单的方法让jquery遍历每个顶级对象,将它与具有相应ID的DOM元素绑定,然后将所有子对象设置为该ID的属性?
很抱歉,如果这是一个明智的选择。我找不到在主jquery页面中处理json的正确方法。
答案 0 :(得分:2)
for(var element in json){
for(var attribute in json[element]){
$('#' + element).attr(attribute, json[element][attribute]);
}
}
答案 1 :(得分:1)
您不需要任何插件:
$.post("/page/",
"",
function(json){
try{
//relevant part
for(element in json){
$(element).val(json[element]);
}
//end of relevant part
}catch(e){alert(e.description);}
}, "json");
Matt's answer是正确的,我误读了json
回复。这是一个更简单的处理程序,因为它只考虑元素的文本值。
答案 2 :(得分:0)
这个怎么样?
jQuery.each(jsonObject, function(input_idx, input_val)
{
var input = $('#' + input_idx);
jQuery.each(input_val, function(attr_idx, attr_val)
{
input.attr(attr_idx, attr_val);
});
});
或者您可以使用简单的for循环:
for (var input_idx in jsonObject)
{
var input_val = jsonObject[input_idx];
var input = $('#' + input_idx);
for (var attr_idx in input_val)
{
input.attr(attr_idx, input_val[attr_idx]);
});
});