2008-10-21 135 views
15

我有一個頁面,在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框架。我該怎麼辦?

+1

哪裏是你的JavaScript?在「主」框架還是框架集? – Tomalak 2008-10-21 08:54:14

回答

-2

$(document).ready()沒有理由不被調用。 確保您的頁面包含一個包含到jquery.js。嘗試用空白的HTML頁面做一個簡單的測試,並且只是提醒一下,看看是否有其他問題。

如果你要使用這個包含了框架的定義HTML頁面中,記住,沒有文件在那裏,你將不得不使用

+4

你將不得不使用....? – Ken 2008-10-21 10:57:18

1

你試圖把jQuery代碼內Info.aspx頁面?

+0

我們知道它是否是ASP.NET? – 2008-10-23 13:57:12

+0

@BrianG框架src是`Operations.aspx?main ='Info.aspx` – Gogol 2017-03-08 08:25:57

0

我不知道這是否是最好的解決方案,但是當我刪除$(document).ready()並保留其身體時,一切都很完美。

0

不知道你在做什麼,但我有一個更古老的經典asp應用程序運行在框架外,我最近添加了jQuery功能,它工作的很好。 $(document).ready()在框架內工作正常,但如果您希望在另一個框架中引用DOM,則必須使用框架的onload事件來通知您框架的DOM何時加載。無可否認,我使用了iFrames,但概念應該是一樣的。

2

如果你想火的onload事件的框架,然後按照下列步驟:

  1. 分配一個idname每個<frame>標籤。確保idname屬性值相同。

  2. 使用下面的代碼來觸發onload事件的幀的:

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

我曾嘗試在另一則留言中提到的方法:

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

,並沒有爲我工作。

這個做:

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

即使該事件不會很快火 - 等待,直到圖像和CSS已加載也。

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]將是第二幀,等等。如果您無法控制標記,這樣做特別好,並且它仍在使用文檔。

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> 
2

我知道這是一個老話題。但爲了幫助你們中的一些人達到此頁面,這裏是我的解決方案:

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

無需修改標記。只需修復選擇器。它應該是:

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

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

注:似乎jQuery的ready事件觸發多次。確保你的邏輯沒問題。

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 
相關問題