如何让jQuery的用户界面自动完成走出IFRAME?(How make jquery-ui aut

2019-07-02 18:42发布

是否有可能使自动完成(jQueryUI的)的建议得到一个iframe,具有“选择”元素相同的行为? 我做了一个例子:

http://jsbin.com/ehidef/1

Answer 1:

作为事实上,这是可以做到,虽然有些造型将是强制性的。 jQueryUI的接受附加的选项的元素,你可以通过父窗口为元素。 一个例子:

主窗口:

<html>
    <head></head>
    <body>
        <iframe src="iframe.html"></iframe>
    </body>
</html>

Iframe.html的

<html>
    <head>
        <!-- include jQuery and jQuery UI and the like -->
        <script type="text/javascript">
            jQuery(function($){
                // This will take parent frame if in iframe, own body elsehow
                var el=top.document.body 

                // Instructs jQuery UI to show things on that previous element
                $('input').autocomplete({appendTo:el}); 
            });
        </script>
    </head>
    <body>
        <input type="text"/>
    </body>
</html>

整个例子是缺少explainig点不相关的所有的东西,所以它不是功能。 根据需要Addapt并添加一些suggar。

至于造型我是前闯民宅,你将不得不放弃元素的位置和风格,相对于输入位置1)位置上的父窗口无关; 2)父母并不需要有装载jQueryUI的样式,虽然可以从与类似的技术的iframe内dinamically加载它们。

重要:

这如果双方,父母和孩子都在同一个域中只会工作[见: SOP ]

UPDATE

完成这样做同样的事情后,我想出了这个解决方案的造型和位置:

var files=[ // UI styles to be loaded on top frame
        "css/ui-lightness/jquery-ui-1.10.3.custom.css",
        "css/ui-lightness/custom.css"
]

// Create link tag and append to top frame head
for (var a in files) {
    var style=$("<link/>", {
        rel: "stylesheet",
        type: "text/css",
        href: files[a]
    });

    $(top.document).find('head').append(style);
}

// As it turns out i had many iframes, so this will get the right one
var parentIframe=$(el).find('iframe').filter(function(){
    return window.frameElement==this
});

$('input').each(function(){ // Cicle inputs to use with ui autocomplete
    // set position to left + input offset  2 is a fix for borders on input
    var pos= "left+"+($(this).offset().left+2)+
    // and to top + input position + height to have it on the bottom
             " top+"+($(this).offset().top+$(this).outerHeight()+1);

    // Autocomplete 
    $(this).autocomplete({
        appendTo:top.document.body, // put it on top window's body
        position:{
            at: pos,        // at calculated position
            of:parentIframe // from parent iframe
        }
    })

});

再次,有可能是空隙,所以用随意相关代码填写



文章来源: How make jquery-ui autocomplete get out iframe?