2014-07-25 9 views
7

Ich versuche, das drag Ereignis auf einem div sofort nach der Verkabelung mit jQuery-UI draggable Widget auszulösen. Ich habe Code, der beim Ziehen gezogen wird, und ich möchte diesen Code auch direkt nach dem Laden der Seite ausführen. Ich tue dies manchmal auf anderen jQuery-Handler ein Idiom wie folgen aus:Programmgesteuertes Auslösen eines jQuery-UI ziehbaren "Drag" -Ereignisses

$('.foo').on('bar', function() { 
    console.debug('bar!'); 
}).trigger('bar'); 

Das funktioniert nicht mit draggable zu funktionieren scheint. Hier ist mein Code:

var draggable = $('[draggable]').draggable({ 
    drag: function(event, ui) { 
     //do some stuff 
     console.debug(event); 
    } 
}).trigger('drag'); 

Die drag Handler aufgerufen werden, wenn ich das Element ziehen, aber nicht beim Laden der Seite.

Info, die relevant sein könnte:

  1. Wenn ich das Element ziehen, das Ereignis, das wie folgt aussieht in der Konsole erscheint:

    jQuery.Event { 
        type: "drag", 
        target: div#myElementId.ui-draggable, 
        currentTarget: document, 
        delegateTarget: document, 
        data: null, 
        //lots of other properties 
    } 
    
  2. Ich habe versucht, verschiedene Anpassungen, und nichts hat funktioniert:

    • Verwenden Sie die jQuery.Event Konstruktor und manuell die oben genannten Eigenschaften
    • Angabe des genauen Element mit document.getElementById Ich möchte Einstellung
    • Auslösen mousedown oder mousedown.draggable statt drag (dies auf einige Abhilfe Code basierte ich gefunden)

  3. Ja, mir ist klar, dass ich den Handler einfach separat definieren kann. Ein Teil des Grundes, warum ich dies tun möchte, ist der Zugriff auf den Parameter ui, was mir eine einfache Möglichkeit gibt, die Position und den Offset des Elements zu erhalten. Ich könnte sie auf andere Weise finden, aber es ist nervig. Ich bin auch neugierig, warum das nicht funktioniert.

  4. Suchen auf Google und SO haben keine Lösungen, nur Workarounds, die für mich nicht relevant sind, zusammen mit anderen Beschwerden über das gleiche Problem aufgetaucht. Jörn Zaefferer from the jQUI team recommended the jQuery.simulate plugin als Workaround, so dass es einfach nicht möglich ist. Es scheint merkwürdig, dass sie es nicht mit anderen jQuery-Ereignissen konsistent machen würden.

+0

Justin verwenden, ich Ich will das Gleiche tun, hast du getan gur es aus? danke – dav

+0

@dav - Nein. Scheint, vom Plugin nicht unterstützt zu werden. Sie müssten wahrscheinlich jquery.simulate verwenden, wie Sie in Ihrer Antwort vorgeschlagen haben, oder den Plugin-Code anpassen. –

+0

yeah hatte ich kommentiert und erst nach einiger Zeit das Plugin gefunden)) – dav

Antwort

0

versuchen, es wie dieses

var draggable = $('[draggable]').draggable({ 
    drag: function(event, ui) { 
     dostuff(ui); 
    } 
}); 


function dostuff(ui){ 
    //do stuff with ui 
} 
+1

Danke, aber ich glaube nicht, dass du die Frage verstanden hast.Ich versuche, das Drag-Ereignis * auszulösen und keinen Handler anzuhängen. Mit anderen Worten, ich versuche zu simulieren, dass der Benutzer beginnt, das Element zu ziehen. –

+0

Ich sehe diesen alten Thread beantwortet eine ähnliche Frage, aber ich habe es nicht versucht http://StackOverflow.com/Questions/730409/Jquery-Ui-Call-Start-drag-manual – astroanu

+0

nur 'Drag: Dostuff' .. sowieso, dies ist der richtige Weg +1 –

3

ist hier jquery ui Plugin

https://github.com/jquery/jquery-ui/blob/9e8e339648901899827a58e5bf919f7dda03b88e/tests/jquery.simulate.js

enthalten, dass auf der Seite und dann einfach

$("#myElement").simulate('drag'); 
+0

Es gibt einige Probleme beim Ziehen von Sortierbar - http://StackOverflow.com/Questions/7116149/ javascript-testing-to-simulieren-ziehen-für-jquery-ui-sortierbare-lists –

+0

Hier ist eine gute Lösung und Beispiel. http://stackoverflow.com/a/29284621/2576692 –

Verwandte Themen