Serialize似乎覆盖多个选择和复选框上的值

时间:2014-10-07 21:09:04

标签: javascript php jquery forms

jQuery API解释了如何在具有以下内容的表单上使用serialize()

<form>
  <select name="single">
    <option>Single</option>
    <option>Single2</option>
  </select>

  <br>
  <select name="multiple" multiple="multiple">
    <option selected="selected">Multiple</option>
    <option>Multiple2</option>
    <option selected="selected">Multiple3</option>
  </select>

  <br>
  <input type="checkbox" name="check" value="check1" id="ch1">
  <label for="ch1">check1</label>
  <input type="checkbox" name="check" value="check2" checked="checked" id="ch2">
  <label for="ch2">check2</label>

  <br>
  <input type="radio" name="radio" value="radio1" checked="checked" id="r1">
  <label for="r1">radio1</label>
  <input type="radio" name="radio" value="radio2" id="r2">
  <label for="r2">radio2</label>
</form>


<script>
  function showValues() {
    var str = $( "form" ).serialize();
    $( "#results" ).text( str );
  }
  $( "input[type='checkbox'], input[type='radio']" ).on( "click", showValues );
  $( "select" ).on( "change", showValues );
  showValues();
</script>

产生类似

的东西
single=Single&multiple=Multiple&multiple=Multiple2&multiple=Multiple3&check=check2&radio=radio1

似乎multiple被覆盖了两次。那我该如何访问多个值?

或者有比使用序列化更现代的方法吗?

2 个答案:

答案 0 :(得分:1)

在选择名称中添加方括号[]。然后$_GET['multiple']将被视为数组。

<select name="multiple[]" multiple="multiple">

有关详细信息,请参阅How do I get all the results from a select multiple HTML tag?

答案 1 :(得分:0)

JQuery正在做它应该做的事情。

https://stackoverflow.com/a/5118766/378151

在HTTP GET上使用多个值时,每个值都会多次列出。

访问服务器上的值取决于您使用的服务器技术。如果您使用的是PHP,请查看我链接的SO答案。

一个基本选项是获取请求的URL,评估查询字符串,在&上标记,然后再次在=上拆分并查看密钥。如果键是'multiple`,则将值添加到值数组中。