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