كيفية إعادة تعيين سمة الاسم لعنصر التحكم في الإدخال بعد إجراء jQuery

StackOverflow https://stackoverflow.com/questions/1958855

سؤال

لدي جدول 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top