4


3

非フォームオブジェクトにserializeArrayを使用していますか?

いくつかの非フォーム要素から作成されたデータを投稿しようとしていますが、それをクラックすることはできません。

フォームフィールドで `serializeArray()`と同じフォーマットで配列を作成するにはどうすればよいですか?

これについていくつかのバリエーションを試しましたが、最後の `.active`タグのみをピックアップします。

$('li.tag.active').each(function() {
    values = {};
    values['tagID'] = $(this).attr('id');
});

$.post("/scripts/php/process.php",{
    'data': data,
    funcName : 'tagResults'
},function(results){
    $("#results").html(results);
})

4 Answer


6


わかりました-serializeArray()で入力フィールドであるかのように動作する最後にこれを見つけました…​

function getTags(){

        var data = new Array();

        $('li.tag.active').each(function() {
                data.push({ 'name':$(this).attr("name"), 'value':$(this).attr("id")});
         });

         $.post("/scripts/php/process.php",{
             'data': data,
             funcName : 'tagResults'
        })

}


2


この関数をJSコードに追加すると、「名前」属性と「値」属性を持つオブジェクトをシリアル化できます。 通常、フォームのシリアル化に使用します。 これらのコントロールはフォームを持たないと言っていましたが、名前/値の属性を持つオブジェクトをシリアル化するために使用できると思います。 また、IDのようなオブジェクトの他の属性を探すために変更するのに十分簡単に​​見えます。 「データ」の定義や「値」の使用法を示していないため、そこで何をしているのか正確に伝えるのは難しい

    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name]) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

次に、それをURL文字列に追加するだけです

var dataToPassToAjax = 'allData=' + myObject.serializeObject();

1つの値のみを渡す場合、シリアル化する必要はありません。

$.post("/scripts/php/process.php",{ 'data': 'data=' + $('li.tag.active').id, funcName : 'tagResults' }).

次に、process.phpで、* $ _ REQUEST ['data'] *の値を取得するだけで、IDを取得できます


1


Obから見た最高の答え。 およびGuntram:https://stackoverflow.com/questions/9589126/jquery-serialize-serializearray-from-an-element-that-is-not-a-form [フォームではない要素からのjQuery serialize / serializeArray]

$( 'div:input')。serializeArray()

入力に加えて、これはselectとtextareaをピックアップします。 甘い。


0


この関数を使用すると、任意の要素セットをシリアル化できます。

function makeSerializable(elem) {
  return $(elem).prop('elements', $('*', elem).andSelf().get());
}

それからあなたはこのようにそれを使うことができます:

var arr = makeSerializable('li.tag.active').serializeArray();

or

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();