2009-03-19 10 views
16

abgelegt wird Ich verwende die JQuery-Bibliotheken zum Implementieren von Ziehen und Ablegen.Wie auf die ID des ziehbaren Elements zugreifen, das in sortierbare

Wie bekomme ich das Element, das gezogen wird, wenn es in sortierbare Liste abgelegt wird?

Ich möchte die ID des div gezogen werden. Das folgende Element gezogen wird:

<div class="control" id="control[1]" > 
    <img src="img/controls/textfield.png" /> 
</div> 

Ich habe die Standardfunktion von ihrem Beispiel ziehen

$(".control").draggable({ 
    connectToSortable: '#sortable', 
    helper: 'clone' 
}); 

Funktion Anschlagabschnitt mit dem nächsten Code Rückkehr richtigen Wert

stop: function(event, ui) { 
    alert(ui.helper.attr('id')); 
} 

in Schleppen Und das ist Sortierbares Element:

<ul id="sortable"><li>test</li></ul> 

und seine Funktion:

$("#sortable").sortable({ 
    revert: true, 
    accept: '.control', 
    receive: function(event, ui) { 
    // here i need to get draggable element id 
    } 
}); 

ich verschiedene ui.id etc versucht haben, die nicht zu funktionieren scheint.

receive: function(event, ui) { 
    $(ui.draggable).attr("id") 
} 

wirft undefined.


aktualisieren:

Sorry, mein Fehler :) Als meine Mutter zu sagen, verwendet - "API Lesen Sie vor der Codierung". ui.item.attr('id') funktioniert gut.

Antwort

25

Versuchen

receive: function(event, ui) { 
    $(ui.item).attr("id") 
} 

Nach der Dokumentation der (in der Tat alle Rückrufe für sortierbar) erhalten zwei Argumente erhalten. Das zweite Argument sollte enthalten:

  • ui.helper - den aktuellen Helfer Element (meist ein Klon des Artikel)
  • ui.position - aktuelle Position des Helfer
  • ui.offset - aktuelle absolute Position des Helfers
  • ui.item - das aktuelle gezogene Element
  • ui.placeholder - der Platzhalter (wenn Sie ein definiert)
  • ui.Absender - die sortierbar, wo die Artikel herkommt (besteht nur, wenn Sie sich von einer verbundenen Liste andere)
+1

Für eine etwas kürzere Version von der Hand, anstelle dieses $ (ui.item).attr ( ) können Sie diese verwenden ui.item.attr ("id") – MrBoJangles

+2

Danke für die Antwort, übrigens. Ich konnte keine Dokumentation für die Attribute eines Artikels oder wie man darauf zugreifen kann, finden. – MrBoJangles

+1

@MrBoJangles aus irgendeinem Grund ist es nicht auf jqueryui.com, wo es sinnvoll wäre, zu sein .. scheint [hier] zu sein (http://docs.jquery.com/UI/Sortable) –

2

Ich hatte ein ähnliches Problem, und hatte Probleme das Helfer Element im Startereignis zugreifen. Am Ende habe ich das Helfer-Attribut auf eine Funktion gesetzt, die etwas benutzerdefiniertes HTML zurückgegeben hat. Ich konnte auf dieses HTML im Start-Event problemlos zugreifen.

helper: function() { 
    return '<div id="myHelper">This is my custom helper.</div>'; 
} 
0

Scheint ein bisschen hacky - aber es hat geklappt! Ich muss $ ('. Dragrow1 li: last') verwenden

8

Es scheint wie die context von ui.item wechselt zwischen dem beforeStop Ereignis und receive Ereignis.

In meinem Fall ich versuche, die ID des Elements zu einem erzeugten Wert und

receive: function (event, ui) { ui.item.attr("id", "control" + currentControlId++);} 

nicht funktioniert für mich

So können Sie dieses Problem umgehen zu setzen:

beforeStop: function (event, ui) { itemContext = ui.item.context;}, 
receive: function (event, ui) { $(itemContext).attr("id", "control" + currentControlId++);} 
+0

Vielen Dank. Ich habe den ganzen Tag nach dieser Lösung gesucht! –

+0

Dies scheint wie ein Hack, aber scheint zu funktionieren. Ist das wirklich der beste Weg, um eine generierte ID zu einem li-Element hinzuzufügen, wenn man sie in eine sortierbare ul ablegt? – Ryan

1

Ja, das ist ein Problem beim Mischen von sortierbaren Ziehhilfen, Droplets usw. Sortiert Container auch als abwerfbar:

$("#sortable").sortable({ 
    revert: true, 
    accept: '.control', 
    receive: function(event, ui) { 
    // here i need to get draggable element id 
    } 
}); 

$('#sortable').droppable({ 
    accept: '.control', 
    drop: function(e, ui){ 
     var your_draggable_element = $(ui.draggable); 
     var your_helper = $(ui.helper); 
    } 
}); 

die

1

arbeiten sollte ich hatte Erfolg mit dem beforeStop Ereignis für die sortierbar.

Von here

beforeStop: Dieses Ereignis wird ausgelöst, wenn Stopps Sortierung, aber wenn der Platzhalter/Helfer noch verfügbar ist.

$("#something").sortable({ 
    beforeStop: function(event, ui) { 
    //you should check if ui.item is indeed the one you want! 
    item_id = $(ui.item).attr('id'); 
    $(ui.item).html('I'm changing the dropped element in the sortable!'); 
    } 
}); 
0

Sie können eine benutzerdefinierte Daten verwenden, schreiben die ID der gezogene Elemente zu speichern. Dieses Attribut ist immer noch auf den abgeworfenen Elementen vorhanden. Der Quellcode wie folgt:

<div class="..." data-id="item_id"> 
    ... 
</div> 

Mit $('dropped item").data('id') in der sortierbare die ID erhalten wie:

$("#sortable").sortable({ 
    ..., 
    receive: function(e, ui) { 
     var id = ui.item.data('id'); 
    } 
}); 
-2
$("#sortable1").sortable({ 
    connectWith: ".connectedSortable", 
    cancel: ".disabledItem", 
    items: "li:not(.disabledItem)", 
    receive: function(event,ui){ 

    **var page = ui.item.attr('value');** 

    var user = $("#select_users").val(); 
+1

Bitte geben Sie eine Erklärung Ihrer Lösung –

+0

@Brian Tompsett Hallo, ich bin der Typ, der dies als niedrige Qualität gekennzeichnet hat. Dies ist ein 2 Jahre alter unvollständiger Beitrag, der von OP aufgegeben wurde. Ihre Bearbeitung hat den Post zu einem ungültigen Codeblock gemacht, der Markdown-Zeug enthält, was ein Syntaxfehler ist. Bitte editieren Sie nicht, es sei denn, es verbessert die Qualität, ohne die Dinge zu verschlechtern. –