2014-10-07 56 views
0

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被覆盖两次。那么我该如何访问多个值?

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

+0

Are you sure Multiple2 is listed?看看他们的例子,只有“选定”的值应该被序列化。 – Snekse 2014-10-07 21:26:42

+0

你如何“访问”这些值?用JS或在服务器上? – Snekse 2014-10-07 21:27:59

+0

@Snekse类似于'<?php if(isset($ _ GET [“multiple”])){$ multiple = $ _GET [“multiple”];}' – 1252748 2014-10-07 22:12:59

回答

0

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

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

当使用通过HTTP GET多个值,它将与每个值被列出多次。

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

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

+0

如何访问存储在同一变量名下的多个值。当我做'<?php echo var_dump($ _ GET);?>'我只看到最后设置的值。 – 1252748 2014-10-07 21:25:34

+0

啊,访问是一个服务器端的问题。我会参考与之相关的答案。有几个选项给出。 – Snekse 2014-10-07 21:29:03

+0

如果没有发送到服务器并在服务器上访问,您还会对数据做什么?谢谢! – 1252748 2014-10-07 21:37:30

1

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

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

更多信息,请参见How do I get all the results from a select multiple HTML tag?

+0

我知道这是被接受的PHP实践,正如http://stackoverflow.com/a/5118766/378151所涵盖的那样,但是为了让PHP感到开心,需要更改您的HTML似乎很奇怪和不圣洁。 – Snekse 2014-10-07 21:46:45

+0

是的,我同意你必须*重新命名你的表单输入,以适应PHP的方式。然而,你如何以通用的方式知道'