2009-02-12 80 views
38

我一起工作的客户端的情况下具有像这样一个框架...运行JQuery的另一个框架

<frameset rows="100,*, 0"> 
    <frame name="theFrame" id="theFrame" src="blah.html" > 
    <frame name="theSecondFrame" id="theSecondFrame" src="foo.html" > 
    <frame name="importantFrame" id="importantFrame" src="myFrame.html" > 
</frameset> 

当某个动作发生,我需要我的帧(这是目前隐藏importantframe)至大多接管页面并阻止与其他框架的交互。我正计划使用jquery block UI插件阻止交互。

问题是我实际上无法更改foo.html或blah.html文件。所以JS代码不能住在那里。 我需要做的是在这些帧的上下文中执行我的jQuery代码。所以我只想回顾一下,我需要我的JQuery代码来生活在myFrame.html中,但是在其他框架的上下文中执行。我怎样才能做到这一点?希望这是有道理的。

感谢 CDR

回答

0

我不能确定该块插件,但你不能得到相关框架的保持和使用“框架树”操纵它,是这样的:(从内importantFrame热媒)

parent.theFrame.someProperty = someValue; 

如:

parent.theFrame.location.href='anotherPage.html'; 

从我一直在读什么,你可能需要jQuery的目标页面上,但你可以尝试SOMET兴象:

parent.theFrame.block(); 

或可能:

$('#theFrame').block(); 
80

jQuery功能,你更通常与$打电话,采取所谓的上下文中的第二个参数,这是“jQuery对象的哪些DOM元素应该我在“中进行搜索。大多数时候你忽略了这个参数,所以上下文默认为当前的HTML文档。当您的代码在iframe中执行时,文档默认为iframe的文档。但是您可以轻松获取其他框架之一的文档。

例如,将其放在myFrame.html中,这将从其中的blah.html中删除框架中的所有h1元素。注意第二个参数$,这是从内部重要帧抓住嗒嗒帧中的表达:

<html> 
    <head> 
    <script type="text/javascript" src="/javascripts/jquery.js"></script> 
    <script type="text/javascript"> 
     function doIt() { 
     $('h1', window.parent.frames[0].document).remove() 
     } 
    </script> 
    </head> 
    <body> 
    <h1>My Frame</h1> 
    <a href="#" onclick="doIt()">Do It</a> 
    </body> 
</html> 
+0

好的答案 - 我正要问一个类似的问题! – CMPalmer 2009-04-03 22:28:41

4

像pjb3说,设置了jQuery上下文。如果你有嵌套的框架,你的代码看起来就像这样:

$('*',window.parent.frames[0].frames[0].document).size(); 

或者,更好的是,建立一个快捷方式:

targetFrame = window.parent.frames[0].frames[0].document; 
$('*',targetFrame).size(); 
0

在jQuery中的版本> = 1.7,我们不能让事件老路

旧版本(< 1.7):

var events = $('#form').data('events'); 

1.7和更新的:

var events = $.fn.data($('#form'), 'events');