Json填充到Form中

很多框架都支持将json解释到grid的或者form中,个人手痒,自己写了一个。所用到的内容主要是javascript对json的遍历。如:

  

for (var key in json) {
     alert("name:" + key + " value:" + json[key]);
}

  而具体到网页中,form中会有一些空间,这就要具体情况具体分析了,废话不说,帖代码

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(date.format("yyyy-MM-dd"));
                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;
}

接下来是html中的了。

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/json2.js"></script>
    <script src="/Scripts/bootstrap-3.2.0-dist/js/bootstrap.min.js"></script>
    <link href="~/Scripts/bootstrap-3.2.0-dist/css/bootstrap.min.css" rel="stylesheet" />
    <script src="~/Scripts/fillform.js"></script>
    <title>Index</title>
    <script type="text/javascript">

        $(function () {
            $("#btntest").click(function () {
                $.post("/test2/getjsonstr", {}, function (data) {
                    fillckb("Teammate", data);
                    fillForm($("#fm1"), data);
                });
            });

        });
    </script>
</head>
<body>
    <div class="container">
        <form id="fm1" role="form" class="form-horizontal">
            <h2 class="h2 text-center">运动员资料</h2>
            <div class="form-group">
                <label class="control-label col-sm-2">Id:</label>
                <div class="col-sm-10">
                    <input type="text" name="Id" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Name</label>
                <div class="col-sm-10">
                    <input type="text" name="Name" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Birthday</label>
                <div class="col-sm-10">
                    <input type="text" name="Birthday" class="form-control" />
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Number</label>
                <div class="col-sm-10">
                    <select id="sel1" class="form-control" name="Number">
                        <option value="7" selected>7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                    </select>
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Friends</label>
                <div class="col-sm-10">
                    <input type="checkbox" class="checkbox-inline" name="Friends" val="1" value="1">Saviola
                    <input type="checkbox" class="checkbox-inline" name="Friends" val="2" value="2">Batistuta
                    <input type="checkbox" class="checkbox-inline" name="Friends" val="3" value="3">Lopez
                    <input type="checkbox" class="checkbox-inline" name="Friends" val="4" value="4">Veron
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Teammate</label>
                <div class="col-sm-10">
                    <input type="checkbox" class="checkbox-inline" name="Teammate" val="1" value="1">Van Nistelrooy
                    <input type="checkbox" class="checkbox-inline" name="Teammate" val="2" value="2">Messi
                    <input type="checkbox" class="checkbox-inline" name="Teammate" val="3" value="3">Veron
                    <input type="checkbox" class="checkbox-inline" name="Teammate" val="4" value="4">Nedved
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">Position</label>
                <div class="col-sm-10">
                    <input type="radio" class="radio-inline" name="Position" value="dc" val="dc" />后卫
                    <input type="radio" class="radio-inline" name="Position" value="mc" val="mc" />中场
                    <input type="radio" class="radio-inline" name="Position" value="fw" val="fw" />边锋
                    <input type="radio" class="radio-inline" name="Position" value="st" val="st" />射手
                </div>
            </div>
            <div class="text-center">
                <button type="button" class="btn btn-info col-sm-offset-2" id="btntest">确定</button>
            </div>
        </form>
    </div>
</body>
</html>

附赠json数据

{"Id":100,"Name":"Crespo","Birthday":"2014-08-19T16:06:01.0522081+08:00","Number":9,"Cotch":{"Id":1,"Name":"me"},"Friends":[{"Id":1,"Name":0},{"Id":3,"Name":0}],"Teammate":"3,4","Position":"st"}

最后帖张成功图片

总结:没什么难点,估计大家用点心都能做出来。对于类型的判断,写完后才觉得应该根据控件类型判断会更好,快下班了,回家再改吧。还有就是代码注释中$("[name=" + name + "][value=" + value + "]").attr("checked", "checked");这句话找不到具体的值,不知道是什么原因,还望大神指教。

Json填充到Form中

时间: 2024-08-29 09:54:42

Json填充到Form中的相关文章

MVC客户端使用 Mustache.js把json数据填充到模版中

使用Mustache的好处是:可以把一些反复用到的html部分定义成Mustache模版,以便多次使用.使用Mustache的大致步骤是: →从后台拿到json数据 →获取前台页面预先定义好Mustache模版(占位符必须和从后台传来的的字段或属性名一致) →遍历每行的json数据,使用Mustache.render(template, row)方法把json数据填充到对应的占位符,得到html内容 →把html内容追加到页面的某个位置 显示一个足球俱乐部的下拉框: 当点击下拉框,显示该俱乐部的

ligerui_实际项目_003:form中添加数据,表格(grid)里面显示,最后将表格(grid)里的数据提交到servlet

实现效果: "Form"中填写数据,向本页"Grid"中添加数据,转换成Json数据提交,计算总和,Grid文本框可编辑,排序 图片效果: 总结: //display属性: editor:grid表格可以编辑其类容: //select类型:select+render实现选择填充效果 editor:{ type:"select", data:[{id:"1",text:"品牌一"},{id:"2&q

node.js+react全栈实践-Form中按照指定路径上传文件并

书接上回,讲到“使用同一个新增弹框”中有未解决的问题,比如复杂的字段,文件,图片上传,这一篇就解决文件上传的问题.这里的场景是在新增弹出框中要上传一个图片,并且这个上传组件放在一个Form中,和其他文本字段一起提交给接口. 这里就有几个要注意的问题: 图片上传时最好能在前端指定图片类型,根据这个类型上传到指定的目录.比如这里是新增用户,上传用户图片,那么这里就指定类型是“user”,那么就把这个文件上传到服务器的upload/user目录中.这样方便后期维护,比如要把项目中的文件统一迁移到另外一

Json填充Object工具

using System; using System.Collections.Generic; using System.Text.RegularExpressions; using Campaign.Commons.ConstParam; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace Campaign.Commons.ExtMethod { public static class JsonParamsHelper {

判断JSON返回的对象中的firstName这一列的值是否包含指定的字符

判断JSON返回的对象中的firstName这一列的值是否包含指定的字符,如果包含指定字符则返回true,否则返回false 标签: <无> 代码片段(1)[全屏查看所有代码] 1. [代码][其他]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

ie下ajaxSubmit提交form中包含file时,提示下载(后台采用struts2)

原因:主要是后台传回的数据的响应方式,默认是application/***,要将其修改成text/html,这样返回的是字符串,到前台,如果需要可以将其转成所需格式 解决方案: 前台 提交前的校验 1 var validateForm = function() { 2 var flag = true; 3 if (window.ActiveXObject) { 4 IE下的处理……修改flag11 } else if (window.MessageEvent && !document.ge

可以将一些配置信息已json格式存在数据库中读取的时候序列化。

public partial class json序列化 : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            StringBuilder builder = new StringBuilder(); builder.Append("{");            builder.Append("    \"C

使用Json.Net解决MVC中各种json操作

最近收集了几篇文章,用于替换MVC中各种json操作,微软mvc当然用自家的序列化,速度慢不说,还容易出问题,自定义性也太差,比如得特意解决循环引用的问题,比如datetime的序列化格式,比如性能.NewtonSoft.json也就是Json.Net性能虽然不是最好的,但是是比较靠前的,其功能是最强大的,包含各种json操作模式.现在来看看mvc中的替换1, Controller.Json方法这个方法最容易出现循环引用,比如EF查出一个一对多集合想序列化,结果a引用了子表b,b中还引用了a,导

jquery中form中使用submit出现的问题,未解决

$("#login_btn").click(function(){在type为submit的按钮下 if($("#id_password").val().length == 0){//检验密码是否为空 $('form').submit(function(){ alert("1") return false; }); }else if($("#vali").val() != code){//验证码是否正确 $('form').s