6

我正在使用 Twitter 的引导程序,需要将复选框选择的分隔列表传递给我的服务器进行处理。复选框 HTML 如下所示:

<div class="controls">
    <label class="checkbox"><input type="checkbox" name="my_match[]" value="190">TEST 190</label>
    <label class="checkbox"><input type="checkbox" name="my_match[]" value="200">TEST 200</label>
    <label class="checkbox"><input type="checkbox" name="my_match[]" value="210">TEST 210</label>
</div>

...

$.post("form.php", $("#form_id").serialize(), function(){
    ...
});

我使用 jquery 将表单值作为序列化字符串传递,但这些值的发送方式如下:

my_match=190&my_match=200

是否可以按以下格式发送它们?

my_match=190:200

我不确定我是否需要更改我的 HTML,或者这是我需要用 javascript 处理的事情。有什么想法吗?

4

3 回答 3

13

像这样的东西可以解决问题:

<div class='controls'>
    <label class="checkbox">
        <input type="checkbox" name="my_match[]" value="190">TEST 190</label>
    <label class="checkbox">
        <input type="checkbox" name="my_match[]" value="200">TEST 200</label>
    <label class="checkbox">
        <input type="checkbox" name="my_match[]" value="210">TEST 210</label>
</div>

<form>
    <input id='my_match' type='hidden' name='my_match[]' />
    <button>Submit</button>
</form>

$('form').submit(function() {
    var arr=[];

    $('input:checked[name=my_match[]]').each(function(){
        arr.push($(this).val());
    });

    $('#my_match').val(arr.join(':'));
    alert($('#my_match').val());

    // Prevent actual submit for demo purposes:
    return false;
});
​
​

试试 小提琴


编辑:这基本上正是大通在他的回答中所描述的。

于 2012-05-12T01:51:31.150 回答
4

我相信具有相同名称的复选框以逗号分隔的列表返回。您可以做的是创建一个隐藏字段,按照您想要的方式附加您选中的复选框值,然后发送隐藏字段。

于 2012-05-12T01:32:35.330 回答
1

对于其他被 Google 带到这里的人:

据我所知,JavaScript 是使它们成为带分隔符的字符串的唯一方法,因为如果您想要一个通用解决方案来处理所有可能的所需分隔符并支持转义分隔符(如果它出现在其中一个中),它就会变得复杂值字符串。

如果可能的话,我强烈建议只接受my_match=190&my_match=200格式并在服务器上转换它们。

在 PHP 中,如果您将 放在[]名称的末尾,这是自动的。在其他语言中,例如 Python,通常会有一个特殊的 getter,它返回一个列表而不是单个值。(例如,request.POST.getlist('my_match')在 Django 中)

依赖 JavaScript 会使您的页面更加脆弱,因为不稳定的连接、网络中断或损坏的应用程序层防火墙可能会阻止 JavaScript 加载或延迟足够长的时间以使用户尝试在没有它的情况下单击提交。

(而且,如果您在 JavaScript 加载之前禁用提交按钮,您只会惹恼和/或挫败您的访问者,并给他们一种印象,即您的网站是粗制滥造的,因为其他人在没有这种限制的情况下做得很好。始终保持注意你的行为如何影响你给人的第一印象。)

...更不用说,取决于 JavaScript,当您不严格需要时(例如,没有:hover后备的下拉菜单、琐碎地需要 JavaScript 提交的表单等)会惹恼像我这样使用 JavaScript 白名单工具(如 NoScript)的人:

  1. 制作网络广告并“进行调查!” 插页式广告不那么烦人
  2. 减少打开大量选项卡和扩展程序的迟缓
  3. 限制 0-day 漏洞利用成功的机会

如果您在这种情况下绝对必须使用 JavaScript,请务必使用标签警告人们在填写表单之前<noscript>启用 JavaScript 重新加载。

于 2016-01-16T01:09:07.183 回答