4

いくつかの非フォーム要素から構築されたデータを投稿しようとしていますが、それを解読できないようです。

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

4 に答える 4

6

ok-これは、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'
        }) 

}
于 2010-09-20T16:19:46.993 に答える
2

この関数をJSコードに追加すると、「name」属性と「value」属性を持つ任意のオブジェクトをシリアル化できます。私は通常、フォームをシリアル化するために使用します。これらのコントロールは形式がないとおっしゃっていましたが、これを使用して、name/value属性を持つ任意のオブジェクトをシリアル化できると思います。また、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が取得されます。

于 2010-09-20T15:32:25.047 に答える
1

私がObから見たベストアンサー。およびGuntram: フォームではない要素からのjQuery serialize / serializeArray

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

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

于 2014-09-03T18:58:34.137 に答える
0

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

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

次に、次のように使用できます。

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

また

var $elem = $('li.tag.active');
var data = makeSerializable($elem).serialize();
于 2014-07-19T11:14:16.560 に答える