2012-10-27 51 views

回答

2

由於事實上,這是可以做到,雖然有些造型將是強制性的。 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點不相關的所有的東西,所以它不是功能。根據需要添加適量並添加一些suggar。因爲1)相對於輸入位置的位置在父窗口上是不相關的,2)父母不需要加載jqueryui樣式表,儘管你可以用類似的技術從iframe裏面加載它們。

重要:

如果雙方,父母和孩子都在同一個域中這隻會工作[見: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 
     } 
    }) 

}); 

再一次,可能會有空洞,所以請隨意填寫相關代碼