【问题标题】:jquery serialize and multi select dropdownjquery 序列化和多选下拉菜单
【发布时间】:2011-07-04 08:57:39
【问题描述】:

我一直在使用 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

将选择更改为数组类型也无济于事factoryUsers[]

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

【问题讨论】:

  • 嗯,正如 Jordan 所说,Jquery 运行良好。我不确定查询字符串 factoryUsers=5&factoryUsers=23&factoryUsers=11 是否会被服务器正确处理,结果证明它处理得很好,因为我得到了数组 $_POST['factoryUsers'] 中的所有值,这是具有 3 个值的数组。顺便提一下我用过factoryUsers[]
  • 非常有用的问题 - 感谢您的提示!

标签: javascript jquery forms webforms


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    您能告诉我们您使用的是什么语言吗?

    【讨论】:

    • 我正在使用 PHP。你是对的,它取决于服务器端语言来正确处理它。我不确定查询字符串 factoryUsers=5&factoryUsers=23&factoryUsers=11 是否会被服务器正确处理,结果证明它处理得很好,因为我得到了数组 $_POST['factoryUsers'] 中的所有值,这是具有 3 个值的数组
    • 很高兴它对你有用。看起来您也发现了 PHP 在字段名称末尾使用 [] 的“特殊”方式。祝你项目的其余部分好运。
    • 谢谢!是的,我确实知道 PHP 可以处理诸如 factoryUsers[] 之类的字段的发布值,但我不知道值是像 factoryUsers[]=5&factoryUsers[]=23&factoryUsers[]=11 一样传递的,当我看到这个查询字符串时, 以为处理不好,就误贴了 不先测试就不行,以为有问题。非常感谢您指出这一点,这让我再次测试。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      谢谢...

      【讨论】:

        【解决方案5】:

        尝试使用 val() 获取价值

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

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

        factoryUsers=1,2,4

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

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

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

        【讨论】:

          【解决方案6】:

          可以使用PHP函数

          parse_str($_POST)
          

          这个函数似乎是一个提取函数。运行后,你可以访问一个名为$factoryUsers的var,这个var是一个数组$factoryUsers[n]

          【讨论】:

            猜你喜欢
            • 2011-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多