遍历input到数组对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    
    
    <form class="form-horizontal" role="form">
        <div class="form-group">
            <label class="control-label">money:</label>
            <div>
                <input type="text" name="money" class="form-control">
            </div>
        </div>
        <div class="form-group">
            <label class="control-label">age:</label>
            <div>
                <input type="text" name="age" class="form-control">
            </div>
        </div>
        <div class="form-group">
            <label class="control-label">height:</label>
            <div>
                <input type="text" name="height" class="form-control">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2">
                <button type="button">保存</button>
            </div>
        </div>
    </form>
    
    <script>
        // 1、遍历所有的 input 取到它们的value 和 name 值存到数组对象里;
        // 2、新手有点伤脑筋,求老师父指点一下下。
        var postdata = {
            id:'',
            title:'',
            content:'',
            forms:[]
        }
        var forms = {
            label:'',
            value:''
        }
        // 现在是想把input 的 name 存到 forms.label里 
        // input的value 存到 forms.value 里;
        // 然后再把 forms 添加到 postdata.forms数组里。
        // 好难阿 >_<  我的是思路是先给所有的 input 一个class valiform 
        // 然后 jQuery $.each valiform ; 
        // $.each(valiform,function(i,v){
        //     myforms.label = $(this).attr('name');
        //         myforms.value = $(this).val();
        //         saveData.forms[i] = myforms;
        //     });
        //  这样是错的。搞不定了!
    </script>
</body>
</html>
阅读 2.8k
4 个回答
$.each(valiform,function(i,v){
postdata.forms.push({
    label: $(this).attr('name'),
    value: $(this).val()
});
});

其实你思路基本是对的

var inputs = document.querySelectorAll('input')
var forms = Array.prototype.map.call(inputs, input => {
    return {
        label: input.getAttribute('name'),
        value: input.value
    }
})

其中 inputs 是所有要提取属性的 input 的数组。

Array.from(document.querySelectorAll('input'),e=>{const obj={};obj[e.name]=e.value;return obj})

你看下 这个效果是否是你需要的效果

var postdata = {
            id:'',
            title:'',
            content:'',
            forms:{}
        }
        var forms = {
            label:[],
            value:[]
        }
        document.querySelectorAll('input').forEach(function (e,i){
            forms.label.push(e.name);
            forms.value.push(e.value);
        });
        postdata.forms=forms;
        console.log(forms);
        console.log(postdata.forms);

还有一点就是 postdata.forms 你这边是个数组对象,而下面的 forms又是个JSON对象,虽然对调用对象没什么区别,但是最好还是改成同类型

望早日解决问题~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题