JQuery和框架 - $(文档).ready不起作用

时间:2008-10-21 08:46:35

标签: javascript jquery frames

我有一个页面,在js和jQuery中有一些代码,它运行得很好。但不幸的是,我的所有网站都非常陈旧,并使用框架。因此,当我将页面加载到框架内时,$(document).ready()不会启动。

我的框架集如下:

<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize> 
    <frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0">
    <frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">      
</frameset>

我的网页已加载到main框架中。我该怎么办?

12 个答案:

答案 0 :(得分:7)

我尝试过另一条评论中提到的方法:

$("#frameName").ready(function() {
    // Write you frame on load javascript code here
} );

它对我不起作用。

这样做了:

$("#frameName").load( function() {
     //code goes here
} );

即使事件没有快速启动,它也会等到图像和css也加载完毕。

答案 1 :(得分:3)

我知道这是一个古老的话题。但是为了帮助一些到达此页面的人,这是我的解决方案:

$($("#frameName")[0].contentWindow.document).ready(function() {
    // Write you frame onready code here
});

答案 2 :(得分:2)

如果您要为您的相框触发onload事件,请按以下步骤操作:

  1. 为每个id标记分配name<frame>。确保idname属性值相同。

  2. 使用以下代码触发框架的onload事件:

    $("frameName").ready(function() { 
      // Write your frame onload code here
    }
    

答案 3 :(得分:2)

我认为这是我在iframe中使用DOMContentLoaded时遇到的类似问题。

我写了a blog post about it

答案 4 :(得分:1)

您是否尝试将jQuery代码放在Info.aspx页面中?

答案 5 :(得分:1)

以下内容对我也有用:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script>
<script>
$(window.parent.frames[0].document).ready(function() {
    // Do stuff
});
</script>

[0]表示它是文档中的第一帧,[1]是第二帧,依此类推。如果您无法控制标记,并且仍在使用文档准备就绪,这一点特别好。

答案 6 :(得分:1)

我在这篇文章上工作了很长时间......这是我的解决方案。

的test.html

<!DOCTYPE HTML>
<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>

    <script>        
      document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>');

      $('#frame_content').attr('src', 'test2.html');
      $('#frame_content').load(function()
      {
        if('${"#header"}' != '') {
          $("#header", frame_content.document).remove();
        }
      });
      if($('#frame_content').complete) $('#frame_content').trigger("load");
    </script>

</head>
</html>

test2.html

<!DOCTYPE HTML>
<html>

  <head>
  </head>

  <body>
    <div id="header">You will never see me, cause I have been removed!</div>
  </body>
</html>

答案 7 :(得分:0)

我不知道这是否是最佳解决方案,但当我删除$(document).ready()并保留其身体时,一切都运作良好。

答案 8 :(得分:0)

不确定你要做什么,但我有一个更老的经典asp应用程序,它运行在框架之外,我刚刚添加了jQuery功能,它运行良好。 $(document).ready()在一个框架内工作正常,但如果你想在另一个框架中引用DOM,你必须使用Frame的onload事件让你知道何时加载了框架的DOM。不可否认,我使用的是iFrame,但概念应该是相同的。

答案 9 :(得分:0)

无需修改标记。只需修复选择器。它应该是:

$("frame[name='main']").ready(function(){..}); 

不是

$("#frameName").ready(function(){..}); 

注意:似乎jQuery ready事件多次触发。确保你的逻辑没问题。

答案 10 :(得分:0)

这个答案可能会迟到,但这个回复可能对像我这样的人有所帮助......

这可以通过原生Javascript代码完成 -

ifrm2 = var ifrm2 = document.getElementById('frm2');
if (ifrm2.contentDocument.readyState == 'complete') {
  //here goes the code after frame fully loaded
}

 //id = frm2 is the id of iframe in my page

答案 11 :(得分:-2)

没有理由不调用$(document).ready()。 确保您的网页包含jquery.js的附加内容。尝试使用空的HTML页面进行简单的测试,只需要一个警报,看看是否还有其他问题。

如果您试图在包含框架定义的HTML页面中使用它,请记住那里没有文档,您将不得不使用