jQuery-ui可以在iframe中进行排序

时间:2015-08-17 11:07:45

标签: javascript jquery jquery-ui iframe jquery-ui-sortable

我在主框架中有droppable个元素,在iframe app中有sortable个元素。我需要的是连接它们 - 能够将项目拖动到iframe的sortable

我做了以下事情: http://jsfiddle.net/w9L3eorx/1/

内部iframe我有

<div class="content">
    <div class="block">Foo</div>
    <div class="block">Bar</div>
</div>

<script>
    $('.content').sortable({
        iframeFix: true,
        placeholder: 'block-placeholder',
        update: function (event, ui) {
            // turn the dragged item into a "block"
            ui.item.addClass('block');
        }
    });
</script>

主框架

<div class='items'>
    <div class="one">One</div>
    <div class="two">Two</div>
</div>

<iframe src="frame.html" id="frame" width="800" height="800"></iframe>

<script>
    $('.items div').draggable({
        helper: function(e) {
            return $('<div>').addClass('block').text( $(e.target).text() );
        },
        iframeFix: true,
        connectToSortable: $('.content', $("#frame")[0].contentDocument)
    });
</script>

我看到了工作示例http://ma.rkusa.st/zepto-dnd/example.html。但它是在没有jquery的情况下构建的,并且不适用于IE9

2 个答案:

答案 0 :(得分:3)

你走了:

    $('.items div').draggable({
        helper: function(e) {
            return $('<div>').addClass('block').text( $(e.target).text() );
        },
        iframeFix: true,
        connectToSortable:$('#frame').contents().find('.content').sortable({
            iframeFix: true,
            placeholder: 'block-placeholder',
            update: function (event, ui) {
                // turn the dragged item into a "block"
                ui.item.addClass('block');
            }
        })
    });

FIDDLE http://jsfiddle.net/w9L3eorx/5/

请注意,您的iframe应该只是纯HTML(不要在那里初始化可排序或者行为不端)

答案 1 :(得分:1)

我已经改变了boszlo示例以满足我的需求:

  • 我需要先在iframe中进行初始排序(我的可放置侧边栏会在稍后点击后显示)
  • 我需要在父(主)框架中重新初始化可连接的连接,但完全相同的选项

http://jsfiddle.net/w9L3eorx/8/

所以在 iframe 中我添加了功能

window.destroySortableAndGetOptions = function (selector) {
    var opts = $(selector).sortable('option');
    $(selector).sortable('destroy');
    return opts;
}

这将破坏可排序和返回选项。

droppable初始化之前的主框架中,我销毁sortable并选择

var sortableOptions = document.getElementById('frame').contentWindow.destroySortableAndGetOptions('.content');

并使用相同的选项重新初始化sortable

...
connectToSortable:$('#frame').contents().find('.content').sortable(sortableOptions)
...