2012-08-03 15 views
0

好吧,我知道這已被問了很多,但似乎沒有任何解決方案實際上適用於我。這是情況。我有一個需要添加到現有網站的網頁,該網站使用了我無法觸及的母版頁。這限制了我使用javascripts window.onload,因爲我無法訪問body標籤。windows onload沒有從外部腳本發射

在我的頁面上,我將外部的.js文件鏈接到每個其他外部文件下的頭部。這裏是我的.js文件的一個例子。

var myobj = null; 
(5 or so functions that work properly. Mainly just toggles that show and hide divs. none touch the onload) 
function load(){ 
myobj = document.getElementById("my_element"); 
alert("test"); 
} 
window.onload = load; 

試過這個,加載函數永遠不會觸發,因爲我從來沒有得到警報。我已經嘗試了在加載函數中註釋掉第一行,並且只有沒有警報,仍然沒有。環顧四周,我還發現了另一種做法,我嘗試了沒有成功。其他一切都是一樣的,除了我刪除了window.load並添加了這個。

function addLoadEvent(func) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function') { 
    window.onload = func; 
} else { 
    window.onload = function() { 
     if (oldonload) { 
      oldonload(); 
     } 
     func(); 
    } 


    } 
} 
addLoadEvent(load); 
addLoadEvent(function() { 
    /* more code to run on page load */ 
    alert("hello2"); 
}); 

在此功能中,兩種警報都不會觸發。我也嘗試在一個函數之外放置一個警報,那個函數確實有效。

我使用的瀏覽器是IE 8.0.7600.16385和Chrome 21.0.1180.60

讓我知道如果你需要更多的信息。

哦,作爲一個附註,我不能使用jquery或任何其他的JavaScript庫,因爲我們試圖儘可能保持輕量級。此頁面也必須在IE8下工作,也就是目前企業只支持瀏覽器。如果它能在Chrome中運行,那也不錯。

編輯 在情況下,我會對此完全錯誤的方式,我所試圖做的是保持跟蹤的最後一個元素我有。我基本上有一個2列的頁面,左邊是菜單,右邊是內容。內容全部放在div中,一次只顯示一個類別。它應該工作的方式是在點擊菜單類別時隱藏以前的內容並顯示新的內容。

我已將我的內容類設置爲顯示:無;並將start_content ID設置爲顯示:block ;. Javascript應該做的是用start_content對象初始化我的全局變量。當點擊菜單時,它會調用一個執行obj.style.display ='none'的函數,然後將新的obj設置爲display ='block'。然後它接受新的obj並將其放置在我的全局變量中,以便在下一次菜單單擊時進行更改。

這裏沒有任何的onload功能

var prevContent = document.getElementById("start_content"); 
function toggle(id) { 
prevContent.style.display = "none"; 
var content = document.getElementById(id); 
content.style.display = "block"; 
prevContent = content; 
} 

這樣做的問題是,prevContent不明,當它進入切換功能的例子。我以爲這是因爲我在頭部鏈接這個.js文件,所以頁面還沒有加載我的start_content,這就是爲什麼我已經改變它聲明全局爲空,然後設置一個window.onload在創建後設置適當的值。

+1

'function load(); {'是一個**語法錯誤**,所以如果這真的是代碼的樣子,那可能是問題。 (分號存在問題。)當然,錯誤控制檯會告訴你這個問題。 – Pointy 2012-08-03 13:04:20

+0

@點不,它不是,這是一個錯字。我編輯了這個帖子來解決這個問題。如果這有助於Chrome的錯誤控制檯顯示「Uncaught TypeError:無法讀取null的屬性'樣式',則在菜單中單擊後,會發生這種情況,正確地通過2個函數,然後敲擊執行* prevContent.style的函數.display =「none」; *就是那個返回爲空的變量。 – Tony318 2012-08-03 13:10:47

回答

0

將「延遲」添加到頭部的腳本標記中最終取得了成效。