سؤال

أحاول نشر بعض البيانات التي تم إنشاؤها من بعض العناصر غير النمطية ، لكن لا يمكنني أن أتطرق إليها.

كيف يمكنني إنشاء صفيف بنفس التنسيق مثل 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);
}) 
هل كانت مفيدة؟

المحلول

حسنًا - وجدت هذا في النهاية والذي يعمل تمامًا كما لو كان حقول الإدخال مع 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'
        }) 

}

نصائح أخرى

تتيح لك إضافة هذه الوظيفة إلى رمز 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();

إذا كنت تمر فقط قيمة واحدة ، فلن تحتاج إلى التسلسل.

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

ثم في Process.php ، فقط احصل على قيمة $ _request ['Data' وسيكون له هويتك

أفضل إجابة رأيتها من OB. و Guntram: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();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top