2012-04-15 16 views
3

Ich habe zwei UL auf meiner Seite. UL1 und UL2. Beide sind sortierbar und ziehbar. Wenn LI von UL1 zu UL2 addiert wird, wird der LI aus UL1 herausbewegt. Um von der UL2 zu entfernen, klickt der Benutzer auf einen Löschlink innerhalb der LI. Die Logik entfernt das Element und fügt es von UL2 zurück zum UL1 hinzu.Zuordnung ID-Attribut zu li funktioniert nicht

Dies ist mein Code:

$(".xOut").on("click", function(){ 
     var id = $(this).attr('id'); 
     $.ajax({ 

      url: '@Url.Action("RemoveCommand")', 
      type: "POST", 
      data: { 
       aid: id, 
       bId: @(Model.Id) 
      }, 
      success: function(event, ui){ 
       var newListItem = $("<li />", { 
        html: $("#"+id).html() 
       }); 

       $(newListItem).attr("id", id); 

       newListItem.appendTo("#sortable1"); 
       $("#"+id).remove(); 
      } 
     }); 
    }); 

-Code funktionieren, wenn ich diese Zeile nicht hinzufügen:

$(newListItem).attr("id", id); 

ich das neue Element brauchen eine id hatte, und kann nicht funktionieren ohne es.

Wie kann das funktionieren?

Update hinzugefügt HTML-CODE:

<ul id="sortable1" class='droptrue'> 
@for (var i = 0; i < Model.SomeList.Count(); i++) 
{ 
    var item = @Model.SomeList.ElementAtOrDefault(i); 
    if (item != null) 
    { 
     <li id="@(item.Id)"> 
      <div>@item.Name</div> 
     </li> 
    } 
} 
</ul> 

<ul id="sortable2" class='droptrue'> 
    @for (var i = 0; i < Model.SomeAssignedList.Count(); i++) 
    { 
     var item = @Model.SomeAssignedList.ElementAtOrDefault(i); 
     if (item != null) 
     { 
      <li id="@(item.Id)"> 
      <div>@item.Name</div> 
      </li> 
     } 
    } 
    </ul> 

Antwort

3

Statt ein neues Element zu erstellen und die alte Position zu entfernen, nur um es bewegen:

$(".xOut").on("click", function(){ 
    var id = $(this).attr('id'); 
    $.ajax({ 
    url: '@Url.Action("RemoveCommand")', 
    type: "POST", 
    data: { 
     aid: id, 
     bId: @(Model.Id) 
    }, 
    success: function(event, ui){ 
     $("#sortable1").append($("#"+id)); 
    } 
    }); 
}); 
+0

Das hat funktioniert! Groß! Danke mein Herr! – jmogera

1

Ich bin mir nicht sicher, warum dies einen Ajax-Aufruf beinhaltet, aber trotzdem - warum Sie die alte Position vor Sie die neue hinzufügen nicht entfernen mit die gleiche id?

+1

Es wäre das gleiche, weil jQuery mehrere Elemente mit dem gleichen 'id' unterstützt. –

+0

Mein Punkt war, dass im ursprünglichen Code ein neues Element mit dieser ID erstellt und irgendwo angehängt wird, * dann wird * remove() für diese ID aufgerufen, vermutlich das alte und das neue Element entfernen;) – delicateLatticeworkFever