Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何存储<;输入>&引用;名称“;作为对象的属性,然后存储匹配的<;输入>&引用;“价值”;作为该对象的值';谁的财产?_Javascript_Jquery - Fatal编程技术网

Javascript 如何存储<;输入>&引用;名称“;作为对象的属性,然后存储匹配的<;输入>&引用;“价值”;作为该对象的值';谁的财产?

Javascript 如何存储<;输入>&引用;名称“;作为对象的属性,然后存储匹配的<;输入>&引用;“价值”;作为该对象的值';谁的财产?,javascript,jquery,Javascript,Jquery,我希望动态地构建一个对象,其中一个属性是输入名称,该属性的值是输入值 这是HTML <form> <fieldset> <legend>form</legend> <label>First<input type="text" value="null" name="first"/></label>

我希望动态地构建一个对象,其中一个属性是输入名称,该属性的值是输入值

这是HTML

<form>
                <fieldset>
                    <legend>form</legend>
                    <label>First<input type="text" value="null" name="first"/></label>
                    <label>Last<input type="text" value="null" name="last"/></label>
                    <label>Email<input type="text" value="null" name="email"/></label>

                    <input type="submit" value="submit"/>
                </fieldset>
            </form>
我还尝试了.serializeArray(),它返回一个对象数组。但是,我不知道如何将所有键/值对从该对象中提取出来并放入一个新的对象中

最终目标不是通过ajax发送这些数据,而是发送给第三方,该第三方聚合数据以进行分析。请帮忙。我自学成才,完全迷路了。哈哈。谢谢

PS

我试过这个

$( "form" ).on( "submit", function( event ) {
            event.preventDefault();
            var input = $("form").serializeArray();
            $.each(input, function(i, field){
                console.log(JSON.stringify(input[i]));
            });
        });
但它返回了这个

{"name":"first","value":"null"}
{"name":"last","value":"null"}
{"name":"email","value":"null"}
这似乎同样无济于事。哈哈

我希望能够得到这样的结果

{
  "first" : "null",
  "last" : "null",
  "email" : "null"
}

我能想到的最简单的方法是使用它,然后将它应用到一个对象或对象。比如说

$('form').on('submit', e => {
    e.preventDefault();

    let values = $(this).serializeArray().reduce((map, input) => {
        let value;
        if (map.hasOwnProperty(input.name)) {
            value = Array.isArray(map[input.name]) ?
                map[input.name] : [map[input.name]];
            value.push(input.value);
        } else {
            value = input.value;
        }
        map[input.name] = value;
        return map;
    }, {});
})
这将通过将命名值设置为数组来处理
元素

JSFiddle演示在这里~


旧版本

$('form').on('submit', function(e) {
    e.preventDefault();

    var values = $(this).serializeArray().reduce(function(map, input) {
        var value;
        if (map.hasOwnProperty(input.name)) {
            value = Array.isArray(map[input.name]) ?
                map[input.name] : [map[input.name]];
            value.push(input.value);
        } else {
            value = input.value;
        }
        map[input.name] = value;
        return map;
    }, {});
})

这应该行得通,尽管现实中我不明白它的必要性。检查浏览器的控制台。它给了我:
{first:“null”,last:“null”,email:“null”}

$(文档).ready(函数(){
$('form')。关于('submit',函数(e){
e、 预防默认值();
var arrObj={};
$(this).find('input:not(:submit'))。每个(函数(i,el){
el=$(el);
arrObj[el.attr('name')]=el.val();
});
console.log(arrObj);
})
});

形式
弗斯特
最后
电子邮件

我不明白为什么提交按钮只需要它就可以生成一个对象

所以这里是我尝试只生成没有数组的输出

函数生成(){
var obj={};
$('form input')。而不是('[type=“submit”]'))
.each((索引,输入)=>obj[input.name]=input.value);
$('#result').text(JSON.stringify(obj));
}

形式
弗斯特
最后
电子邮件
生成


如何找到两个独立数组中的名称和值之间的关系?你能从示例html中发布你的预期输出吗?这将错过
elementstrue,但我在模仿他的原始代码,因为它只需要输入。谢谢。其思想是创建具有动态属性名和动态值的json对象,以发送给第三方。我的控制台里也有同样的东西。谢谢你。但是我想知道如何与我的程序的其他部分共享这个对象?你能给我指一下正确的方向吗?搜索时间取决于您尝试使用信息的位置。给我一秒钟我的补偿restarted@Jhecht这太神奇了。我真的非常感谢你的帮助。谢谢。我喜欢使用地图。这也为我指明了下一步阅读的方向。谢谢你的帮助,菲尔@塔姆,不客气。请注意,对于
或复选框元素,这将无法正常工作。如果您需要支持,请告诉我those@Tamb已更新以处理多重选择和checkboxes@Tamb我删除了
映射
示例。它没有添加任何内容,只会使数据对象的传输更加困难,比如说我需要一个json对象。我是否可以放弃map函数而使用JSON.stringify()作为reduce中的回调?
$('form').on('submit', function(e) {
    e.preventDefault();

    var values = $(this).serializeArray().reduce(function(map, input) {
        var value;
        if (map.hasOwnProperty(input.name)) {
            value = Array.isArray(map[input.name]) ?
                map[input.name] : [map[input.name]];
            value.push(input.value);
        } else {
            value = input.value;
        }
        map[input.name] = value;
        return map;
    }, {});
})