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 では[]、名前の最後に the を付けると自動的に実行されます。Python などの他の言語では、通常、単一の値ではなくリストを返す特別な getter があります。(たとえば、request.POST.getlist('my_match')Django の場合)

JavaScript に依存すると、不安定な接続、ネットワークの問題、またはアプリケーション層のファイアウォールの破損により、JavaScript の読み込みが妨げられたり、ユーザーが JavaScript なしで [送信] をクリックしようとするのに十分な時間遅延したりする可能性があるため、ページがより脆弱になります。

(そして、JavaScript が読み込まれるまで送信ボタンを無効にすると、訪問者を苛立たせたり苛立たせたりして、他の人はその制限なしで問題なくやっているのに、あなたのサイトはお粗末に構築されているという印象を与えるだけです。常に遵守してください。あなたの行動があなたの第一印象に与える影響に注意してください。)

...言うまでもありませんが、厳密に必要でないときに JavaScript に依存すること (例::hoverフォールバックのないドロップダウン メニュー、JavaScript の送信を軽薄に要求するフォームなど) は、私のように NoScript のような JavaScript ホワイトリスト ツールを使用している人々を悩ませます。 :

  1. Web広告を作って「アンケートに答えよう!」インタースティシャルの煩わしさを軽減
  2. 大量のタブや拡張機能を開いているときの反応の鈍さを軽減
  3. ゼロデイ エクスプロイトが成功する可能性を制限する

このような状況でどうしてもJavaScript を使用する必要がある場合は、タグを使用して、フォームに入力する<noscript>にJavaScript を有効にしてリロードするように人々に警告してください。

于 2016-01-16T01:09:07.183 に答える