关于ajax接受数据后回调内容给表单
因为碰到列表页和修改页的内容在一个jsp页面,所以想到用ajax来异步接受数据,返回对象给修改页内容。
但碰到了点问题,比如如何很好的把传过来的对象直接赋值到相应的表单控件位置?
直接放代码:
调用的ajax方法:
function updateAdmin(id){ alert(id); $.post("/Meal_System/back/updateAdmin/"+id, function(data) { alert(data); $("#updateForm").formEdit(data.admin,data.adminRoleList); } ,"json") };
这段代码可以默认的让传递过来的值赋给控件。【但没有包括select下拉框】
$.fn.formEdit = function(data1,data2){ return this.each(function(){ var input, name; if(data1 == null){this.reset(); return; } for(var i = 0; i < this.length; i++){ input = this.elements[i]; //checkbox的name可能是name[]数组形式 name = (input.type == "checkbox")? input.name.replace(/(.+)\[\]$/, "$1") : input.name; if(data1[name] == undefined) continue; switch(input.type){ case "checkbox": if(data1[name] == ""){ input.checked = false; }else{ //数组查找元素 if(data1[name].indexOf(input.value) > -1){ input.checked = true; }else{ input.checked = false; } } break; case "radio": if(data1[name] == ""){ input.checked = false; }else if(input.value == data1[name]){ input.checked = true; } break; case "button": break; default: input.value = data1[name]; } } });
//给下拉框赋默认值 for(var i=0; i< data2.length;i++){ $("#selectRole").append("<option"+ <c:if test='data1.fkRoleId == data2.role_id'>selected='selected'</c:if>+">"+data2[i].role_name+"</option>"); } };
这段代码与上面那个for循环添加option效果是一样的 //$.fn.formEdit2 = function(data2){ // return $(data2).each(function(i){ // $("#selectRole").append("<option>"+this.role_name+"</option>"); // }); //};
但下拉框自己一直没解决好,现在这样写会 每次点击都添加一遍下拉框的值,而且不能一开始selected你的默认值。【不知怎么解决:上面那个
"<option"+ <c:if test='data1.fkRoleId == data2.role_id'>selected='selected'</c:if>+">"+data2[i].role_name+"</option>"不知怎么拼接解决】
】