微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jquery-ui – 在iframe中创建可排序的jQuery UI

页面上,我有一个iframe.在这个iframe是我需要排序的项目的集合.所有的 Javascript都在父页面上运行.我可以访问iframe文档中的列表,并使用上下文创建可排序:
var ifrDoc = $( '#iframe' ).contents();

$( '.sortable',ifrDoc ).sortable( { cursor: 'move' } );

但是,当尝试对物品进行排序时,我会发现异常行为.点击一个项目后,脚本的目标将更改为外部文档.如果您将鼠标从iframe移出,您可以通过单击移动该项目并将其放回来,但是您不能在iframe中与其进行交互.

示例:http://robertadamray.com/sortable-test.html

那么,有没有办法实现我想做的 – 最好不用在jQuery UI代码中进行黑客攻击?

解决方法

动态地将jQuery和jQuery UI添加到iframe( demo)中:
$('iframe')
    .load(function() {
        var win = this.contentwindow,doc = win.document,body = doc.body,jQueryLoaded = false,jQuery;

        function loadJQueryUI() {
            body.removeChild(jQuery);
            jQuery = null;

            win.jQuery.ajax({
                url: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js',dataType: 'script',cache: true,success: function () {
                    win.jQuery('.sortable').sortable({ cursor: 'move' });
                }
            });
        }

        jQuery = doc.createElement('script');

        // based on https://gist.github.com/getify/603980
        jQuery.onload = jQuery.onreadystatechange = function () {
            if ((jQuery.readyState && jQuery.readyState !== 'complete' && jQuery.readyState !== 'loaded') || jQueryLoaded) {
                return false;
            }
            jQuery.onload = jQuery.onreadystatechange = null;
            jQueryLoaded = true;
            loadJQueryUI();
        };

        jQuery.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js';
        body.appendChild(jQuery);
    })
    .prop('src','iframe-test.html');

更新:Andrew Ingram is correct,jQuery UI保存并使用jQuery UI加载页面的窗口和文档引用.通过将jQuery / jQuery UI加载到iframe中,它具有正确的引用(对于iframe而不是外部文档)并按预期工作.

更新2:原始代码片段有一个微妙的问题:动态脚本标签的执行顺序不能保证.我已经更新它,以便在jQuery准备好之后加载jQuery UI.

我也收集了getify的代码load LABjs dynamically,所以不需要轮询.

原文地址:https://www.jb51.cc/jquery/176670.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐