美文网首页
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