2015-10-14 65 views
2

我对JavaScript很陌生,无法找到解决方案。 我有以下代码。如何更改serializeObject输出格式?

<form class="edit-task-form"> 
     <legend>Create Task</legend> 
     <label>Task</label> 
     <input type="text" name="task" /> 
     <hr /> 
     <button type="submit" class="btn">Create</button> 
    </form> 

var taskDetails = $(ev.currentTarget).serializeObject(); 
var task = new Task; 
task.save(taskDetails, { 
    success: function(task) { 
     alert(task.toJSON()); 
    } 
}); 
console.log(taskDetails); 

$.fn.serializeObject = function() { 
var o = {}; 
var a = this.serializeArray(); 
$.each(a, function() { 
    if(o[this.name] !==undefined) { 
     if(!o[this.name].push) { 
      o[this.name] = [o[this.name]]; 
     } 
     o[this.name].push(this.value || ''); 
    } 
    else { 
     o[this.name] = this.value || ''; 
    } 
}); 
return o; 

输出为:对象{任务: “fasdfasd”}

我想它是:对象{ “任务” :“fasdfasd”}

如何让“任务”出现在引号中?

非常感谢!

大卫

+0

你并不需要手动的报价添加到对象的属性名称,如果转换成JSON它会自动出现,如果使用对象发送数据,无论底层api只发送一个字符串的属性名称。 –

回答

0

你有这样的功能:

$.fn.serializeObject = function() { 
var o = {}; 
var a = this.serializeArray(); 
$.each(a, function() { 
    if(o[this.name] !==undefined) { 
     if(!o[this.name].push) { 
      o[this.name] = [o[this.name]]; 
     } 
     o[this.name].push(this.value || ''); 
    } 
    else { 
     o[this.name] = this.value || ''; 
    } 
}); 
return o; 

你需要到c它焊割这样:

$.fn.serializeObject = function() { 
var o = {}; 
var a = this.serializeArray(); 
$.each(a, function() { 
    if(o['"'+this.name+'"'] !==undefined) { 
     if(!o['"'+this.name+'"'].push) { 
      o['"'+this.name+'"'] = [o[this.name]]; 
     } 
     o['"'+this.name+'"'].push(this.value || ''); 
    } 
    else { 
     o['"'+this.name+'"'] = this.value || ''; 
    } 
}); 
return o; 

只需添加到关键引号

0

一个解决方案:

$.fn.serializeObject = function() { 
var o = {}; 
var a = this.serializeArray(); 
$.each(a, function() { 
    if(o[this.name] !==undefined) { 
     if(!o[this.name].push) { 
      o[this.name] = ['"' + o[this.name] + '"' ]; //<--------- 
     } 
     o[this.name].push(this.value || ''); 
    } 
    else { 
     o[this.name] = this.value || ''; 
    } 
}); 
return o; 
} 

$.fn.serializeObject = function() { 
 
var o = {}; 
 
var a = this.serializeArray(); 
 
$.each(a, function() { 
 
    if(o[this.name] !==undefined) { 
 
     if(!o[this.name].push) { 
 
      o[this.name] = ['"' + o[this.name] + '"' ]; //<--------- 
 
     } 
 
     o[this.name].push(this.value || ''); 
 
    } 
 
    else { 
 
     o[this.name] = this.value || ''; 
 
    } 
 
}); 
 
return o; 
 
} 
 
var val = $('.edit-task-form').serializeObject(); 
 
document.write('<pre>'+ JSON.stringify(val , null , ' ') + '</pre>') 
 
$('form').submit(function(evt){ 
 
    evt.preventDefault(); 
 
document.write('<pre>'+ JSON.stringify($(this).serializeArray() , null , ' ') + '</pre>') 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form class="edit-task-form"> 
 
     <legend>Create Task</legend> 
 
     <label>Task</label> 
 
     <input type="text" name="task" /> 
 
     <hr /> 
 
     <button type="submit" class="btn">Create</button> 
 
    </form>