2016-11-15 41 views
2

的document.ready功能我想學習jQuery和我感到困惑多麼的document.ready()函數的工作jQuery的:爲什麼不能正常工作

$(document).ready(function(){} 

在HTML中,

<script type="text/javascript" src="jquery.js"></script> 
<script src="script.js" type="text/javascript"></script> 

鏈接位於文檔的最底部,就在結束標籤之前。在我的javaScript文件中,我有我的所有代碼在.ready函數中。然而,當我加載頁面,並且將鼠標懸停在鏈接上時,我的光標在幾秒鐘內不會變成指針,如果我立即向下滾動,文本還沒有加載幾秒鐘, 。 我的javaScript文件有一堆iframe等...所以我可以理解爲什麼延遲,但讓我困惑的是,我認爲.ready函數的全部內容是,直到所有其他頁面首先被加載?所以我的文本和我的CSS應該馬上工作嗎?這是我的代碼,如果它有幫助。如果需要,我也可以發佈css。

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>myPage</title> 
    <link rel="stylesheet" type="text/css" href="styles2.css"> 

</head> 
<body> 

<div id="container"> 

<div id="backgroundLeft"><img id='backgroundLeftImage' src="Left.jpg" width="100%"></div> 

<div id="wrap"> 

<p id="text">...some text... <span id="firstLink" class="link">click me</span>.<span><iframe id="frame" class="rect" scrolling="no" marginwidth=0 marginheight=0></iframe> 

</span> ...some more text.... <span id="secondLink" class="link">click me</span>, 
</span><span> 
    <iframe id="frame2" class="rect" scrolling="no" marginwidth=0 marginheight=0></iframe> 
</span> 
... some more text... <span id="thirdLink" class="link">click me</span> </span><span> 
    <iframe id="frame3" class="rect" scrolling="no" marginwidth=0 marginheight=0></iframe> 
</span> ... some more text... 

ETC... 

</p> 

</div> 

<div id="backgroundRight"><a href="index2.html"><img id='backgroundRightImage' src="2VillesRight.jpg" width="100%"></a></div> 

    <script type="text/javascript" src="jquery.js"></script> 
    <script src="script2.js" type="text/javascript"></script> 
</body> 
</html> 

JS

$(document).ready(function(){ 

    var frame = $("#frame"); 
    frame.attr("src","iframe.html"); 
    var frame2 = $("#frame2"); 
    frame2.attr("src","iframe2.html"); 
    var frame3 = $("#frame3"); 

etc... 

     var player; 

     frame.bind("load", function() { 
      player = $(this).contents().find("#firstVid"); 
      player.on('ended', function() { 
       frame.removeClass("open"); 
      }); 
     }); 

     $("#firsLink").click(function(){ 
      if (frame.hasClass("open")) 
      { 
       frame.removeClass("open"); 
       player[0].pause(); 
      } 
      else { 
       frame.addClass("open"); 
       player[0].play(); 
      } 
     }); 

     var player2; 

     frame2.bind("load", function() { 
      player2 = $(this).contents().find("#sylvainVid"); 
      player2.on('ended', function() { 
       frame2.removeClass("open"); 

      }); 
     }); 

     $("#secondLink").click(function(){ 
      if (frame2.hasClass("open")) 
      { 
       frame2.removeClass("open"); 
       player2[0].pause(); 
      } 
      else { 
       frame2.addClass("open"); 
       player2[0].play(); 
      } 
     }); 

     var player3; 

     frame3.bind("load", function() { 
      player3 = $(this).contents().find("#etienneVid"); 
      player3.on('ended', function() { 
       frame3.removeClass("open"); 

      }); 
     }); 

     $("#thirdLink").click(function(){ 
      if (frame3.hasClass("open")) 
      { 
       frame3.removeClass("open"); 
       player3[0].pause(); 
      } 
      else { 
       frame3.addClass("open"); 
       player3[0].play(); 
      } 
     }); 

etc... 
}); 

我知道我的代碼是重複的,我在自修太專注於得到它現在的工作。爲什麼我的主頁花了這麼長時間來加載,如果我所有的代碼都在「document.ready」中?感謝您的時間

+1

這是一般的想法。但在評論之前,有必要查看更多的頁面html。請張貼頁面。 –

回答

5

您可以將您的JavaScript綁定,而不是像這樣

$(window).load(function(){ ... }); 

文件準備好window.load事件使您可以訪問完整的標記,即使圖像和iframe中尚未加載,這在大多數情況下是期望的。

然而,在你的情況下,你可能想要等待一切加載的時間懲罰,這是window.load事件。

+0

同意。我也會提到這一點。 –

+0

當我將我的jQuery代碼包裝在$(window).load(function(){...})中時;這些鏈接根本不起作用 – Paul

+0

@Paul你可能需要在'$(document).ready()'中放置一些代碼,'$(window).load()'內的一些代碼,以及甚至可能在'$(「#frame」).load()'內部有一些代碼,這取決於在加載標記後是否需要執行代碼,只要加載所有iframe和圖像,或者儘快作爲一個特定的iframe被加載,分別 –

0

$(document).ready()只會等待所有頁面的元素加載。它不會等待iFrame加載其內容。

你可以參考這篇文章,如果您有更多問題:

$(document).ready and iframe content

0

你肯定jQuery是正確加載?源(src)屬性需要指向正確的路徑。我發現使用開發人員的工具來查看錯誤,操作CSS並檢查DOM狀態對學習有幫助。我更喜歡Chrome