2016-12-15 5 views
1

Ich habe jetzt schon einige Dinge getestet, und ich verstehe es nicht optimal ist, aber ich brauche per Drag & Drop aus dem Haupt Seite zu einem iframe. Beide sind auf der gleichen Domain.Drag iFrame mit jQuery UI Ziehbare

Ich habe mit iframeFix getestet, aber entweder wird es nicht in meinem Browser (Chrome) unterstützt oder ich mache etwas falsch.

http://api.jqueryui.com/draggable/#option-iframeFix

<div id="mycontainer" class="mycontainer"> 
    <iframe id="iframewindow" src="./child.html" frameborder="0" width="100%" height="100%"></iframe> 
</div> 

im iframe: (. Ich benutze jQuery UI innerhalb des iframe für sortierbar)

<div id="sortable"> 
    <div class="portlet"> 
    some content 
    </div> 
</div> 

Das Skript für innerhalb der Hauptseite ziehbar Laden:

$(function() { 

    $(".draggable").draggable({ 
     connectToSortable: "#sortable", 
     helper: "clone", 
     iframeFix: true, 
     helper: function(event) { 
      return "<div class='custom-helper'>I move this</div>"; 

     }, 
     revert: "invalid", 
    }); 
    $().disableSelection(); 
)}; 

Ich habe mit Overlays usw. getestet, aber irgendwie habe ich es nicht zur Arbeit bekommen.

Ist es eine Möglichkeit, Drag & Drop von einer HTML-Seite zu einem Iframe zu machen? (In allen Browsern?)

Ich brauche keine jQuery UI ziehbar, wenn eine andere Lösung gut funktioniert.

+0

Um zu bestätigen, Sie versuchen, ein Element aus einer Seite zu ziehen, um eine sortierbare, auf einer Seite innerhalb eines iFrame? – Twisty

+0

Ja. Meine Liste der ziehbaren Elemente (Elemente) befindet sich im Haupt-HTML, und ich ziehe sie über und in ein Sortierbar innerhalb eines iframe. – Preben

+0

Leider kann ich für diesen Fall kein Problem machen, sonst hätte ich es getan. – Preben

Antwort

3

fand ich diese Antwort und war in der Lage, sie anzuwenden: jQuery-ui droppable to sortable inside iframe

Hier ist meine Fiddle: https://jsfiddle.net/Twisty/gkxe8vpy/4/

HTML

<div id="mycontainer" class="mycontainer"> 
    <iframe id="iframewindow" src="" frameborder="0" width="100%" height="100%"></iframe> 
</div> 

<div id="draggable" class="ui-state-highlight">Drag Me</div> 

JavaScript

/** 
* Code to populate iFrame, mimics actual SRC 
*/ 
var frameHTML = "<div id='sortable'><div class='portlet'>some content</div></div>"; 

var $iframe = $("#iframewindow"); 
$iframe.ready(function() { 
    $iframe.contents().find("body").html(frameHTML); 
}); 
/** 
* End of iFrame code 
*/ 
$(function() { 
    $("#draggable").draggable({ 
    connectToSortable: $iframe.contents().find("#sortable").sortable({ 
     items: "> div", 
     revert: true, 
    }), 
    helper: "clone", 
    iframeFix: true, 
    helper: function(event) { 
     return "<div class='custom-helper'>I move this</div>"; 
    }, 
    revert: "invalid" 
    }); 
    $iframe.contents().find("#sortable").disableSelection(); 
}); 

Der "Trick" ist hier, das sortierbar als Ziel der connectToSortable Option zu erstellen. Dies gibt einen selector nach Bedarf zurück und das Objekt wird sich gegenseitig kennen.

Beachten Sie, dass Ihre iframe einfach nur HTML (nicht initialisieren sortierbar dort oder es wird schlecht benehmen) sein sollte

+0

Ich bekomme es eigentlich immer noch nicht mit "echten" iframe zu arbeiten. Das Beispiel funktioniert gut, und ich habe mit dem JFiddle herumgespielt. Wenn es jedoch auf meinem lokalen Computer mit einem echten iframe versucht wird, funktioniert es nicht. Dieses Problem mit iframes ist wahrscheinlich in jQuery zu sensibel/anfällig. Könnte das nur mehr testen: http://blog.stackhive.com/post/137799349684/building-a-seamless-drag-and-drop-interface (das scheint solide im Vergleich zu jQuery) – Preben

+1

@Preben gibt es eine Menge Einflussfaktoren und jQuery ist möglicherweise einer von ihnen. Die meisten versuchen, sich vor XSS zu schützen, also würde ich in allen gängigen Browsern stark testen, um sicherzustellen, dass die Lösung funktioniert. – Twisty

+0

Ja, ich untersuche das. Ich könnte, mit einem Hack, in der Lage sein, das Ziehbare dem iframe selbst hinzuzufügen. So bin ich sicher, dass es funktionieren wird. :-) Vielen Dank! – Preben