亲测可用!json的表单,反序列化json表单自动回填方法!

在jsp页面表单回填方法

1.靠controller页面跳转,并使用jstl回填.

2.使用ajax方式返回json,再逐个单独回填.

相对这两种方法都比较麻烦,既然表单能序列化,那能不能用name反序列话呢,答案是可以的.

表单序列化为json方法,很简单只需传表单id,例如$("#from")即可

//序列化表单
function getSearchFormDataJson($from) {
	var data = $from.serializeObject();
	return JSON.stringify(data);
}

表单反序列化.传递表单id,和json数据串,即可自动回填,checkbox有些毛病.我也是在网上找的!

//表单自动回填的方法
var fillForm = function($form, json) {
 var jsonObj = json;
 if (typeof json === 'string') {
  jsonObj = $.parseJSON(json);
 }
 for ( var key in jsonObj) { // 遍历json字符串
  var objtype = jsonObjType(jsonObj[key]); // 获取值类型
  if (objtype === "array") { // 如果是数组,一般都是数据库中多对多关系
   var obj1 = jsonObj[key];
   for ( var arraykey in obj1) {
    // alert(arraykey + jsonObj[arraykey]);
    var arrayobj = obj1[arraykey];
    for ( var smallkey in arrayobj) {
     setCkb(key, arrayobj[smallkey]);
     break;
    }
   }
  } else if (objtype === "object") { // 如果是对象,啥都不错,大多数情况下,会有 xxxId
   // 这样的字段作为外键表的id

  } else if (objtype === "string") { // 如果是字符串
   var str = jsonObj[key];
   var date = new Date(str);
   if (date.getDay()) { // 这种判断日期是本人懒,不想写代码了,大家慎用。
    $("[name=" + key + "]", $form).val(str);
    continue;
   }

   var tagobjs = $("[name=" + key + "]", $form);
   if ($(tagobjs[0]).attr("type") == "radio") {// 如果是radio控件
    $.each(tagobjs, function(keyobj, value) {
     if ($(value).attr("val") == jsonObj[key]) {
      value.checked = true;
     }
    });
    continue;
   }
   $("[name=" + key + "]", $form).val(jsonObj[key]);
  } else { // 其他的直接赋值
   $("[name=" + key + "]", $form).val(jsonObj[key]);
  }

 }
}

var setCkb = function(name, value) {
 // alert(name + " " + value);
 // $("[name=" + name + "][value=" + value + "]").attr("checked", "checked");
 // 不知为何找不到具体标签;
 $("[name=" + name + "][val=" + value + "]").attr("checked", "checked");
}

var fillckb = function(name, json) {
 var jsonObj = json;
 if (typeof json === 'string') {
  jsonObj = $.parseJSON(json);
 }
 var str = jsonObj[name];
 if (typeof str === "string") {
  var array = str.split(",");
  $.each(array, function(key, value) {
   setCkb(name, value);
  });
 }
}

var jsonObjType = function(obj) {
 if (typeof obj === "object") {
  var teststr = JSON.stringify(obj);
  if (teststr[0] == '{' && teststr[teststr.length - 1] == '}')
   return "class";
  if (teststr[0] == '[' && teststr[teststr.length - 1] == ']')
   return "array";
 }
 return typeof obj;
}
//表单回填END


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值