使用jquery发布复选框数据

时间:2011-08-02 12:34:54

标签: jquery html checkbox

我有像这样的html剪辑

<input type="checkbox" name="color" value="red"/>red
<input type="checkbox" name="color" value="green"/>green
<input type="checkbox" name="color" value="purple"/>purple
<input type="checkbox" name="color" value="grey"/>grey

我想使用jquery将值发布到服务器,所以我使用了像这样的jquery

$.post('/test', {'color': ['red', 'green']});

我确实在stackoverflow中搜索了这个问题,但人们说它应该是'color []'而不是'color',但每当我使用'color'或'color []'firebug显示帖子数据是'color% 5B%5D =红色&amp; color%5B%5D =绿色',我的服务器无法正常工作,但使用时

<input type="submit" value="submit"/>

发布firebug说数据是'color = red&amp; color = green',我的服务器工作正常。 怎么会这样?我的jquery版本是1.4.4

2 个答案:

答案 0 :(得分:2)

我相信你打电话的时候 -

$.post('/test', {'color': ['red', 'green']});

一个数组作为后期数据被传递,并且数组的扁平化导致'color%5B%5D = red&amp; color%5B%5D = green'结果。

如果您使用以下内容 -

$('input:checkbox[name="color"][checked=true]').serialize()

这应该以'color = red&amp; color = green'格式返回所有选中的复选框。 有一个jsfiddle试图在这里说明这个概念 - http://jsfiddle.net/789nP/

答案 1 :(得分:1)

出于某种原因,jQuery开发人员认为PHP对同名的多个控件的奇怪处理是The Correct Way。因此,在提交数据数组时,jQuery会将[]附加到名称(%5B%5D只是[]的URL编码表示。)

  

发布firebug说数据是'color = red&amp; color = green',我的服务器工作正常

这表明您使用的不是PHP来处理数据,因此PHP对名称中[]的神奇处理不适用。

您可以在服务器上查找color[] ...

e.g。

@values = $query->param('color[]');

...或者您可以设置traditional模式以停止jQuery PHP化您的数据。

$.post('/test', {'color': ['red', 'green']}, { traditional: true });

然后正常访问应该有效:

@values = $query->param('color');