2015-07-01 46 views
5

我试图将项目添加到JavaScript中的数组,然后序列化数组。但是,它似乎并没有工作。添加项目到一个数组,然后序列化()javascript

请看下面的代码,我做错了什么?

var currentParent = $(this).closest('tr'); 
var items = $("input,select", currentParent); 
items["_token"] = $('input[name=_token]').val(); 
var strData = items.serialize(); 
+0

'items'不是一个数组,它是一个jQuery对象。只是坚持它的属性,可能不会做你认为它会。 – Yoshi

+0

也许https://api.jquery.com/jQuery.makeArray/ – mplungjan

回答

-1

试试下面的javscript代码片段。我还没有试过,但我认为它可能工作:

var currentParent = $(this).closest('tr'); 
var items = $(currentParent).find("input, select"); 
items["_token"] = $('input[name=_token]').val(); 
var strData = items.serialize(); 

请参见下面的小提琴链接: https://jsfiddle.net/nanncngr/

+0

谢谢,我只是试过这个,但如果我做'alert(strData);'我可以看到_token仍然没有添加到数组中。 – V4n1ll4

+0

我认为它应该工作。如果“_token”键没有形成,请尝试使用javascript push功能添加“_token”键。 –

+0

我刚刚尝试过'items.push([{_ token:$('input [name = _token]')。val()}]);'但仍然没有运气 – V4n1ll4

2

方法serialize需要被应用到整个窗体,而不是在阵列的具体项目,如果你想要序列已有对象或数组,你需要使用param代替

http://api.jquery.com/jquery.param/

为例:

<form action=""> 
    <input class="token" name="token" value="someValue" /> 
    <input class="someData" name="someData" /> 
</form> 

<script> 
    alert($('form').serialize()) // should show you someData=&token=someValue 
</script> 

https://jsfiddle.net/4cxa36vp/

......或者......

var options = { 
    token : $('input.token').val(), 
    someData : null 
} 

alert($.param(options)) // should give you the same 

https://jsfiddle.net/0ec8axot/

此外,请确保您的表单字段具有属性name

Serialize form not working in jQuery

+0

感谢您的“......或...”部分Andy,我花了一些时间试图找出为什么我不能'.serialize()'一个简单的数组。 [jQuery'.serialize()'docs](https://api.jquery.com/serialize/)甚至没有引用['$ .param()'](https://api.jquery.com/jQuery。帕拉姆/),一会儿我就疯了。 – CPHPython

相关问题