10

これはどこにも見つかりませんでした。誰かが知っているか、提案できるかもしれません。

がたくさんあるフォームがあり、そのフォームをjQuery機能で<inputs>送信したかったので、これをjsonとして送信しました。$.ajax$('#myform').serialize()

これで、フォームがより高度data-になり、送信したい HTML5 属性が追加されましたが、.serialize()それらが表示されません。

<form>それらをタグ、タグに入れてみました<input>-何も機能しません。

それらを取得してすべてのフォーム データと共に送信するためのベスト プラクティスは何ですか? については知っていますが、タグがシリアル化されたすべての属性.serializeArray()を取得するにはどうすればよいですか?data-<form>

4

3 に答える 3

9

これを行う方法は次のとおりです。最善の方法ではないかもしれませんが、本来あるべき方法で機能します。

http://jsfiddle.net/Bvzqe/12/

HTML:

<form id="frm" data-id="123" data-list[one]="first" data-list[two]="second">

連載:

    var form = $('#frm');
    var dataarr = new Array();
    for(var i in form.data()) {
        var subarr = new Array();
        subarr['name'] = i;
        subarr['value'] = form.data()[i];
        dataarr.push(subarr);
    }
    var serialized = $.param(form.serializeArray().concat(dataarr));

data-次のような属性の配列を持つこともできます

data-list[one]="first" data-list[two]="second"

角かっこをエスケープするため、エンコードされた URL は間違っているように見えるかもしれませんが、サーバー側でこれをテストしたところ、すべてが正確に解析されます。

使いたくない方限定です<input type="hidden">

于 2012-08-24T09:42:15.877 に答える
6

可能であれば、追加の値をhidden他の入力フィールドのメタデータとしてではなく、入力フィールド (値ごとに 1 つ) として保存する必要があります。その後、フォームの一部として自動的にシリアル化されます。

悪い考えだと思うので、シリアライザーは書きません。ただし、値をフィールドとしてブラウザーに送信することを主張する場合は、これらのフィールドを入力data-に変換するためにこれを行うことができます。data-hidden

$('#myform:input').each(function() {
    var input = this;
    $.each($(input).data(), function(key, value) {
        $('<input>', {type: hidden, name: key, value: value}).insertAfter(input);
    });
});

自動的にシリアル化される非表示の入力フィールドです。

jQuery は.data()イベントなどの保存にも使用されることに注意してください。これらのオブジェクトの反復処理を避けるには、要素に格納されているデータ関連のプロパティではなく、ネイティブ DOM 関数を使用してdata- 属性を取得する必要があります。

于 2012-08-23T22:24:34.380 に答える