非フォームオブジェクトにserializeArrayを使用しますか?
-
04-10-2019 - |
質問
いくつかの非フォーム要素から構築されたデータを投稿しようとしていますが、それを解読できないようです。
と同じ形式で配列を作成するにはどうすればよいですか? 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);
})
解決
OK-最後にこれを見つけました。
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'
})
}
他のヒント
この関数を JS コードに追加すると、任意のオブジェクトを「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['データ'] そしてそれはあなたのIDを持っています
私がobから見たベストアンサー。とガントラム:jquery serialize / serializearrayフォームではない要素から
$('div :input').serializeArray()
入力に加えて、これによりSelectとTextareaがピックアップされます。甘い。
この関数を使用すると、要素のセットをシリアル化可能にすることができます。
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();