jquery序列化和多选下拉列表

时间:2011-02-25 15:00:01

标签: javascript jquery forms webforms

我一直在使用jquery serialize()函数来序列化表单的值并通过ajax提交它

喜欢例如如果表单名称和ID是 factoryUsers

var data=$("#factoryUsers").serialize();

现在这适用于具有文本字段,文本区域,简单下拉等的表单。 但是当我有多个下拉列表时,事情就会出错 例如如果我有一个类型的下拉列表

<select size="5" id="factoryUsers" name="factoryUsers" multiple="multiple">

序列化不再正常工作。 所以,如果我选择3个用户,我会得到一个像

这样的查询字符串

factoryUsers=5&factoryUsers=23&factoryUsers=11

将select更改为数组类型对factoryUsers[]

无效

任何想法或帮助如何使其正常工作都会很棒。

6 个答案:

答案 0 :(得分:14)

尝试将选择的名称更改为factoryUsers[]。这样你就可以在你的后端循环它。

答案 1 :(得分:11)

您上面描述的字符串输出是通过HTTP为同名表单提交多个值的正确方法,因此jQuery正常工作。由您决定如何在服务器端处理它,这取决于您使用的语言。

如果您使用的是PHP,这可能有所帮助:http://bytes.com/topic/php/answers/12267-how-php-_post-gets-multiple-values-html-form

您能告诉我们您使用的是哪种语言吗?

答案 2 :(得分:7)

您只需要将name name =“factoryUsers”更改为name =“factoryUsers []”PHP会将其视为数组。

答案 3 :(得分:2)

尝试使用val()

获取值
data='factoryUsers=' + $("#factoryUsers").val();

它会以逗号分隔给你的值。

  

factoryUsers = 1,2,4

如果此项目是您的表单之一。然后尝试添加序列化的项目结束的值。示例:

data= f.serialize() + '&factoryUsers=' + $('#factoryUsers').val();

由于项目在请求中写入两次,因此最后一个值在控制器中有效。

答案 4 :(得分:1)

您可以使用PHP函数

parse_str($_POST)

此功能似乎是一个提取功能。运行此操作后,您可以访问名为$factoryUsers的var,此var是一个数组$factoryUsers[n]

答案 5 :(得分:1)

您的元素名称必须是数组类型 factoryUsers[] 改变你的代码:

<select size="5" id="factoryUsers" name="factoryUsers[]" multiple="multiple">

...谢谢