JQuery SerializeArray لا يلتقط عناصر النموذج التي تم إنشاؤها ديناميكيًا
-
26-09-2019 - |
سؤال
لقد حصلت على نموذج تم إنشاؤه ديناميكيًا باستخدام Ajax (حيث يجب أن تأتي بيانات عناصر النماذج من قاعدة بيانات) وأريد تسلسل عناصر النموذج لتقديمها بواسطة Ajax. أنا حاليًا فقط أختبر نظريتي باستخدام التعليمات البرمجية من موقع jQuery فقط لمعرفة ما إذا كان بإمكاني التقاط عناصر النموذج وهذا هو المكان الذي تكمن فيه المشكلة:
$(document).ready(function() {
$('#btnCustomSearch').live('click', function() {
$('#results').html('');
alert($('#customSearchTable :input').serializeArray());
// get all the inputs into an array.
var fields = $('#customSearchTable :input').serializeArray();
jQuery.each(fields, function(i, field) {
$("#results").append(field.name + " = " + field.value + ", ");
});
// now we'll reformat the data as we need
// here we'll send the data via ajax
});
});
أحتاج إلى إجراء بعض التغييرات على البيانات قبل التقديم ، ولم يتم كتابة هذا الرمز بعد ، لكن ما أجد يتم التقاط المملوءة باستخدام JavaScript بشكل صحيح ، ولكن يتم تجاهل أي تم إنشاؤه باستخدام Ajax.
أعلم أن هذا يتم حله عادةً باستخدام "Live" ، لكنني غير واضح بشأن كيفية حل هذا serializeArray()
. باستخدام عناصر النماذج الإضافية AJAX تتم إضافة إلى #customSearchTable
وهؤلاء هم الذين لم يتم التقاطهم.
أي مساعدة كبيرة موضع تقدير.
شكرًا
المحلول
سوف أشرح التعليق أكثر قليلاً هنا:
عندما تتصل .serializeArray()
إنه يحلق مثل أ <form>
التقديم أو أقرب ما يمكن على أي حال ، للحصول على العناصر لتقديمها. الجزء الرئيسي هنا:
.filter(function() {
return this.name && !this.disabled &&
(this.checked || rselectTextarea.test(this.nodeName) ||
rinput.test(this.type));
})
تماما كما <form>
لا يشمل التقديم عناصر بدون أ name
ينسب, ، ال .filter()
اتصل باستخدام this.name
سوف يقوم بتصفية تلك العناصر من تلك التي سيتم تسلسلها.
نصائح أخرى
لأي شخص آخر يجد هذا على أنه "مشكلة" ، يرجى ملاحظة أنه وفقًا لتعليق نيك كرافير أعلاه ، كل ما هو مطلوب هو التأكد من أن سمة "الاسم" تم إلحاقها بعناصر النماذج الجديدة التي يتم إنشاؤها ديناميكيًا. هذا حل مشكلتي! شكرا جزيلا لك حقا نيك!