Javascript 是否将包含&、=的序列化字符串转换为对象?
上面的代码给了我一个字符串Javascript 是否将包含&、=的序列化字符串转换为对象?,javascript,jquery,html,Javascript,Jquery,Html,上面的代码给了我一个字符串 $('#submit-form').click(function(){ var data_serialize = $("#form").serialize(); $("input[type='checkbox']:not(:checked)").each(function(e){ data_serialize += "&"+this.name+'=0'; }); $("input[type='checkbo
$('#submit-form').click(function(){
var data_serialize = $("#form").serialize();
$("input[type='checkbox']:not(:checked)").each(function(e){
data_serialize += "&"+this.name+'=0';
});
$("input[type='checkbox']:checked").each(function(e){
data_serialize += "&"+this.name+'=1';
});
console.log(data_serialize);
})
像这样。现在我想把它做成一个物体。请帮助我它将此字符串转换为javascript对象 var yourString='companyName=&contactName=&role=&email=&phone=&desctiption=&websiteURL=&tccheck=0'; var yourObj=JSON.parse'{'+yourString.replace/=/g',:'.replace/&/g','+'}';
console.logJSON.stringifyyourObj 您可以通过括号表示法轻松循环表单控件以构建对象:
companyName=&contactName=&role=&email=&phone=&desctiption=&websiteURL=&tc-check=0
请注意,我们跳过禁用的输入和没有名称的输入,因为这是表单的标准HTML和serialize的功能。以上内容保留了对复选框的非标准处理
例如:
$“提交表单”。单击函数{
var obj={};
$form.findinput,textarea,select.eachfunction{
var type=this.type.toLowerCase;
如果this.name&!this.disabled&&type!==按钮&&type!==提交{
如果类型===复选框{
obj[this.name]=this.checked?1:0;
}否则{
obj[this.name]=$this.val;
}
}
};
console.logobj;
};
福
酒吧
测试
JSON.parse“{'+'YOURSTRING.replace/=/g':'。replace/&/g','+'}'@Shubham谢谢。它起作用了。我明白逻辑。但是,我搜索了预定义的方法。无论如何thanks@Mr_Perfect-我认为javascript中没有预定义的函数。即使你不能在JavaScription中直接从URL获取数据,对我来说也是非常脆弱的。如果我输入的值带有空白,它会给出,比如companyName=Hello%Stackoverflow,无法替换它。你能这样做吗?如果替换为空格,则输出包含20而不是space@Mr_Perfect-是百分之二十还是仅仅百分之二十?我不认为只有%会来。对不起,这是我的mistake@Mr_Perfect:在某个地方会有一个循环,为什么不在这个代码中?
$('#submit-form').click(function(){
var obj = {};
$("#form").find("input, textarea, select").each(function() {
var type = this.type.toLowerCase();
if (this.name && !this.disabled && type !== "button" && type !== "submit") {
if (type === "checkbox") {
obj[this.name] = this.checked ? 1 : 0;
} else {
obj[this.name] = $(this).val();
}
}
});
console.log(obj);
});