jQuery UI-Drop-Ereignis, bei dem das DropPable-Widget zweimal ausgelöst wird

8

Erstens, ich weiß, dass diese Frage schon einmal gestellt wurde, sowohl auf dieser Seite als auch in anderen, aber die Antworten sind allesamt Müll für mein Szenario (wenn sie nicht ganz Müll sind) und (zumindest für die Frage hier: < a href="https://stackoverflow.com/questions/9479438/jquery-ui-drop-event-of-droppable-fires-ons-sortable"> jQuery UI Drop-Ereignis von dropable feuert auf sortierbare ), Der Vorschlag ist nur, .sortable ganz auszuschalten, was ganz sicher nicht das ist, was ich tun möchte.

Okay, ich habe diese Frage (behalte im Hinterkopf, wenn Optionen oder HTML-IDs albern aussehen, dies ist nur zum Testen, also kann ich das herausfinden):

%Vor%

Und hier ist das gültige Markup:

%Vor%

Ich habe keine überlappenden sortable divs oder ähnliches, und ich glaube, ich verstehe 'warum' das passiert (weil sortable standardmäßig Draggable-Eigenschaften erhält?), ich einfach kann nichts dagegen tun.

Das Problem ist natürlich, dass die ...

%Vor%

... wird zweimal ausgelöst, wenn es nur einmal benötigt wird.

Ich würde denken, dass es eine einfache Lösung für dieses Problem geben würde, denn wenn dieses Problem eine Menge komplexer Skripte zur Behebung benötigt, würde ich denken, dass diese speziellen jquery-Widgets nicht die Mühe wert wären. Vielleicht bin ich nur verwirrt?

    
VoidKing 06.09.2013, 18:53
quelle

3 Antworten

19

Das ist ein bekanntes Problem, das sowohl sortable als auch droppable für dasselbe Element verwendet.

Sie können stattdessen das Ereignis sortable receive verwenden.

jsFiddle Demo

%Vor%     
Itay 06.09.2013, 19:42
quelle
0

Ich hatte ein ähnliches Problem. Es gab zwei abtropfbare Elemente, von denen eines eine relative Position hatte und ein anderes - absolut. Sie waren nicht verschachtelt, aber ein Teil desjenigen mit absoluter Position war über dem Teil desjenigen mit relativer Position (in jQuery-Dokumenten heißt das "schneiden"). Wenn ich ein ziehbares Element in das "absolute" Dropable verschoben habe, wurde das drop-Ereignis zweimal ausgelöst. Ich habe ein paar Tage gesucht, aber keine Lösung gefunden.

Dann habe ich beschlossen, einen einfachen allgemeinen Workaround zu machen. Sieht nicht sehr attraktiv aus, aber das wird in jeder Situation helfen, 2 Drop-Events zu feuern.

%Vor%     
Webars 09.05.2015 05:42
quelle
-2

Vielleicht bin ich ein bisschen zu spät, aber ich habe das hier gepostet, hoffentlich hilft es jemandem. Dies ist der Code, den ich verwende. Grundsätzlich, wenn die Funktion zweimal aufgerufen wird, sollte das Intervall zwischen ihnen schnell sein (schneller als das, was Menschen normalerweise tun), also setze ich die Zahl auf 200 Millisekunden.

Ich habe localStorage verwendet, um eine Variable namens "last_call" zu setzen. Es ist die Zeit, zu der die Funktion aufgerufen wurde. Beim nächsten Aufruf prüfen wir, ob die Funktion zuvor aufgerufen wurde. Wenn es nicht aufgerufen wurde, wird die Funktion weiter ausgeführt. Wenn es angerufen wurde, prüfen wir, wann es das letzte Mal angerufen wurde. Wenn es innerhalb von 200 Millisekunden aufgerufen wurde (was offensichtlich ein Maschinenanruf, kein menschlicher Anruf ist), werden wir es nicht erneut aufrufen.

%Vor%     
codingpuss 17.06.2014 06:17
quelle