美文网首页
jQuery 表单数据存入 JSON

jQuery 表单数据存入 JSON

作者: 寒火儿 | 来源:发表于2018-09-28 11:21 被阅读32次

    表单数据转JSON

    jQuery 1.8.3

    javaScript

    HTML

    JSON

    HTML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <form action="">
            username <input type="text" name="username" value="hanhuoer"><br>
            password <input type="text" name="password" value="admin"><br>
            youremail <input type="text" name="email" value="hanhuoer@admin.com"><br>
            sex <input type="radio" name="sex" value="0" checked="true">男
                <input type="radio" name="sex" value="1">女<br>
            hobby <input type="checkbox" name="hobby" value="yd" checked="true"> 运动 
                <input type="checkbox" name="hobby" value="lt"> 聊天 
                <input type="checkbox" name="hobby" value="yx"> 游戏 <br>
            province <select name="province">
                <option value="hen">河南省</option>
                <option value="heb">河北省</option>
                <option value="hun">湖南省</option>
                <option value="hub">湖北省</option>
            </select>
        </form>
        <input type="button" name="" id="getEveryOne" value="getEveryOne" />
        <input type="button" name="" id="getValue" value="getValue" />
        <input type="button" name="" id="getName" value="getName" />
        <input type="button" name="" id="getType" value="getType" />
        <input type="button" name="" id="getNullJSON" value="getNullJSON" />
        <input type="button" name="" id="getJSON" value="getJSON" />
        <input type="button" name="" id="setForm" value="setForm" />
        <input type="button" name="" id="fillForm" value="fillForm" />
    </body>
    </html>
    

    调试

    因为本人没用过jQuery,所以前期写了一堆事件,做了一些调试工作...

    // 获取需要的元素
    $("#getEveryOne").click(function(){
        // 拿到form节点内的所有元素
        $("form").children("[name]").each(function(){
            // 下面取消对应的注释以查看相应效果
            // console.log(this) // DOM对象
            console.log($(this)) // jQuery对象
        })
    })
    
    • 获取表单中的数据
    // get value
    $("#getValue").click(function(){
        // 拿出text框里的内容
        $("form").children("[type='text']").each(function(){
            console.log($(this).val())
        })
    
        console.log($("form").children("[type='radio']:checked").val())
    
        $("form").children("[type='checkbox']:checked").each(function(){
            console.log($(this).val())
        })
    
        console.log($("form").children("select").val())
    })
    
    • 获取表单中各元素的name

    后边要使用到 name 做判断

    // get name
    $("#getName").click(function(){
        $("form").children("[name]").each(function(){
            console.log(this.name)
        })
    })
    
    • 获取表单中个元素的type
    $("#getType").click(function(){
        $("form").children("[name]").each(function(){
            console.log($(this).attr("type"))
        })
    })
    

    表单数据存入JSON

    • 初始化JSON对象
    $("#getNullJSON").click(function(){
        $("form").children("[name]").each(function(){
            if($(this).attr("type") == "text"){
                //pass
                json[$(this).attr("name")] = ""
            }else if($(this).attr("type") == "radio"){
                //pass
                json[$(this).attr("name")] = []
            }else if($(this).attr("type") == "checkbox"){
                //pass
                json[$(this).attr("name")] = []
            }else{
                json[$(this).attr("name")] = ""
            }
        })
        console.log(json)
    })
    
    • 开始把数据存入JSON
    $("#getJSON").click(function(){
        $("form").children("[name]").each(function(){
            if($(this).attr("type") == "radio"){
                if($(this).prop("checked")){
                    json[$(this).attr("name")].push($(this).val())
                }
            }else if($(this).attr("type") == "checkbox"){
                if($(this).prop("checked")){
                    json[$(this).attr("name")].push($(this).val())
                }
            }else{
                json[$(this).attr("name")] = $(this).val()
            }
        })
        console.log(json)
    })
    
    • 清空表单数据
    // set Form
    $("#setForm").click(function(){
        // 判断当前对象是否是文本框
        $("form").children("[name]").each(function(){
            if($(this).attr("type") != "text"){
                $(this).prop("checked", false)
            }else{
                $(this).val("")
            }
        })
    })
    
    • 把JSON数据填充进表单中
    $("#fillForm").click(function(){
        $("form").children("[name]").each(function(){
            $(this).val(json[$(this).attr("name")])
            // console.log($(this))
            // console.log(json[$(this).attr("name")])
            // console.log($(this).val(json[$(this).attr("name")]))
        })
    })
    

    优化

    HTML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
            #output{
                width: 500px;
                height: 200px;
            }
        </style>
    </head>
    <body>
        <form action="">
            username <input type="text" name="username" value="hanhuoer"><br>
            password <input type="text" name="password" value="admin"><br>
            youremail <input type="text" name="email" value="hanhuoer@admin.com"><br>
            sex <input type="radio" name="sex" value="0" checked="true">男
                <input type="radio" name="sex" value="1">女<br>
            hobby <input type="checkbox" name="hobby" value="yd" checked="true"> 运动 
                <input type="checkbox" name="hobby" value="lt"> 聊天 
                <input type="checkbox" name="hobby" value="yx"> 游戏 <br>
            province <select name="province">
                <option value="hen">河南省</option>
                <option value="heb">河北省</option>
                <option value="hun">湖南省</option>
                <option value="hub">湖北省</option>
            </select>
        </form>
        <input type="button" name="" id="getJSON" value="getJSON" />
        <input type="button" name="" id="setForm" value="setForm" />
        <input type="button" name="" id="fillForm" value="fillForm" /><br>
        <textarea id="output"></textarea>
    </body>
    </html>
    

    JS

    var json = {}
    
    function initJSON(){
        json = {}
        $("form > [name]").each(function(){
            let type = $(this).attr("type")
            let key = $(this).attr("name")
            type == "radio" || type == "checkbox" ? json[key] = [] : json[key] = "";
        })
        console.log(json)
    }
    
    $(function(){
        $("#getJSON").click(function(){
            initJSON()
            $("form > [name]").each(function(){
                let type = $(this).attr("type")
                let key = $(this).attr("name")
                let value = $(this).val()
                type == "radio" || type == "checkbox" ? $(this).prop("checked") ? json[key].push(value) : false : json[key] = value;
            })
            console.log(json)
            $("#output").val(JSON.stringify(json, null, " "))
        })
    })
    

    网页

    ...

    注意:

    radiocheckbox 中的 value 不止一个。

    若要把多个数据填充给一个 key ,是需要使用数组存放数据的。

    第一次写的时候没考虑到 radiocheckbox 的数据,就直接使用字符串赋值了。

    后来调试的时候发现,不管多选框中选择多少个项,hobbyvalue 始终是最后一个 checkboxvalue....

    使用数组,首先就要初始化对象。

    因为使用 Array 对象的 push() 方法可以很方便的向后插入数据...

    相关文章

      网友评论

          本文标题:jQuery 表单数据存入 JSON

          本文链接:https://www.haomeiwen.com/subject/xvguoftx.html