2011-08-30 88 views
0

怎麼會這樣在外部JS文件中獲取CSS值和變量?

var h = $('#searchcontainer').height(); 
$('#completeholder').css('height', h + 'px'); 

工程代碼時,HTML文件內部本身,而不是當我從一個.js文件加載呢?我試圖定義一個全球性的var h;在我的主文件裏面希望JS文件裏面的代碼沒有任何運氣。有任何想法嗎?謝謝:)

編輯: This one does not work

This one works

看到代碼:) 當您按下工作頁面上之後,CSS調整大小到底頂部的評論,這是因爲我將js文件導入到主標題中。

回答

3

我猜測它與運行時間有關。如果它在頁面加載之前運行,那麼這些對象將不會在頁面中並且不會被找到。

爲了使功能的工作,無論它位於何處,把它放在裏面$(document).ready()像這樣:

$(document).ready(function() { 
    var h = $('#searchcontainer').height(); 
    $('#completeholder').css('height', h + 'px'); 
}); 

如果你真正想做的是不同$(document).ready(function()調用之間共享的全局變量,然後需要聲明的全局變量的$(document).ready(function()外:

var myGlobal; 

$(document).ready(function() { 
    var myGlobal = $('#searchcontainer').height(); 
}); 

$(document).ready(function() { 
    $('#completeholder').css('height', myGlobal + 'px'); 
}); 

全局像這樣一般不會擺在首位是一個好主意,讓你真正應該做的是尋找一種方式來解決這個沒有全局變量(如傳遞參數到一個函數調用)。

無法看到實際的工作和非工作代碼的一些觀察:

  1. 你有相同的ID(如contentholder)多個對象。通過id引用這些對象將無法可靠地工作,並且在HTML中被禁止。
  2. 在內聯版本中,您將在case 'NextQuestion1':塊和case 'NextQuestion2Dance':中設置完整持有者的高度,但您在外部JS版本中沒有這樣做。該代碼似乎是修復它的。在我的瀏覽器中,這些情況說明中的高度設置爲479(正確的高度)。這在外部JS版本中不會發生,因此這兩個版本之間的代碼不相同。
+0

我的整個代碼是在一個文檔就緒函數:/ – pufAmuf

+0

下一個猜測。 jQuery是否在你的外部JS文件之前加載? JS文件必須以適當的順序加載。我希望你現在意識到你沒有透露足夠的信息讓我們知道問題是什麼,所以我們只是猜測。給我們一個鏈接到非工作頁面可能會清除事情。 – jfriend00

+0

我實際上認爲變量不會被跨越文件,因爲當從JS文件中取出整個代碼並將其放入html中時 - 一切正常。還有一些內容會在我插入此代碼後動態加載;而且它只有在我從html文件中完成時纔有效。 – pufAmuf