كيفية إعادة تعيين سمة الاسم لعنصر التحكم في الإدخال بعد إجراء jQuery
-
21-09-2019 - |
سؤال
لدي جدول HTML داخل نموذج في عرض ASP.NET MVC. أنا أستخدم المكون الإضافي jQuery TableorTer أيضًا.
هنا هو رمز الجدول (مبسط للمثال)
<table id=managersTable>
<thead>
<tr>
<th>Manager</th><th>Remove</th>
</tr>
</thead>
<tbody>
<tr>
<td>Manager 1<input type='hidden' name='updater.managers[0].Id' value=2313 /></td>
<tr>
<td>Manager 2<input type='hidden' name='updater.managers[1].Id' value=3233/></td>
<td><input type='button' class=removeButtonManager value='Remove' name='remove' /></td>
</tr>
</tbody>
لذلك كما ترون ، يوجد عمود مع نص وعمود ثانٍ مع زر. لقد تم توصيله ، لذلك عند النقر فوق الزر ، قامت بإزالة الصف من جدول HTML باستخدام هذا الرمز:
$(document).ready(function() {
$(".removeButtonManager").live("click", function(event) {
var row = $(this).closest("tr").get(0);
$(this).closest("tr").remove();
$("#managersTable").trigger("update");
$("#managersTable").trigger("appendCache");
});
});
كل شيء يعمل بشكل جيد باستثناء قضية واحدة. عندما أقوم بالنقر فوق الزر "إزالة" ، أزال الصف ولكن المشكلة هي أن الفهرس
name='updater.managers[0].Id'
يتم إيقاف تشغيله الآن ويبدو أنه في أحدث إصدار من ملزمة ASP.NET MVC إذا لم يكن لديك خاصية مفهرسة عناصرك (0،1،2 ، إلخ.) فهي لا تربط.
لذا ، إذا لم أحذف صفًا أبدًا ، فهو يعمل بشكل مثالي مثل 0،1،2 في الأصل ولكن إذا قمت بحذف الصف الأول ، فلدي قائمة فقط (1،2.) ولن يرتبط ASP.NET MVC هذا الكائن.
لذلك أحاول معرفة كيف يمكنني إعادة تعيين فهرس [] في كل عنصر من العناصر بعد إزالة صف ، بغض النظر عن إزالة أي صف ، فإنه يعطيني دائمًا قائمة مستمرة تبدأ من 0.
المحلول
أعتقد أنه سيتعين عليك حلقة جميع العناصر وإصلاح المعرفات. شيء من هذا القبيل يجب أن تعمل
$(document).ready(function() {
$(".removeButtonManager").live("click", function(event) {
var row = $(this).closest("tr").get(0);
$(this).closest("tr").remove();
$("#managersTable").trigger("update");
$("#managersTable").trigger("appendCache");
$("#managersTable").find("input[type=hidden]").each(function(i){
//this is the current input we're looping through
//i is the index
$(this).attr('name', 'updater.managers['+i+'].Id');
});
});
});
ألقِ نظرة على مستندات كل (http://docs.jquery.com/Utability/jquery.each#ObjectCallback) إذا لم ينجح الأمر على الفور ، فيمكنني أن أختلط بشيء ما. امل ان يساعد
نصائح أخرى
من الممكن أيضًا إضافة حقل إدخال مخفي مثل
<input type='hidden' name='updater.managers.Index' value="0" />
لكل قائمة من القائمة ، والتي يتم نشرها مرة أخرى إلى موثق النموذج كقائمة من الفهارس في شكل [0،2،3 ...]. وسوف يتكرر موثق نموذج المجموعة من خلال هذه الفهارس بدلاً من "محاولة" الفهرس المستمر.
يمكن أن تكون قيمة حقل .index إما أرقام أو سلاسل.
لمزيد من التفاصيل ، راجع الجزء الأخير من منشور المدونة هذا:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx