2017-05-02 58 views
0

我正在調用body的onload事件上的函數load()。有時候這個功能有效,有時候不會。根據我的理解,直到主體完全加載後,這個函數纔會被調用。有什麼辦法可以在頁面加載之前調用這個函數嗎?在頁面加載之前調用javascript函數

這裏是home.html的:

<script src="js/custom.js"></script> 
<script src="js/props.json"></script> 
<body onload="load()"> 

<a id="beginner">Beginner Level</a> 
     <div id="beginner-sub" class="well"> 
      <!-- append content here --> 
     </div> 

</body> 

custom.js負載功能:

function load() { 
    var mydata = JSON.parse(beginner); 
    var rows = ""; 
    for(var x=0; x < mydata.length; x++) 
    { 
    rows += '<a href="'+mydata[x].url+'">'+mydata[x].title+'<i class="fa fa-hand-o-right pull-left" aria-hidden="true"></i></a><hr>'; 
    } 
    $("#beginner-sub").append(rows); 
    $("#beginner-sub hr:last-child").remove() 
} 

這是我props.js

beginner = '[{"title" : "Simple Program", "url" : "simple.html"}, {"title" : "Check Palindrome", "url" : "palindrome.html"}]'; 
+0

沒有,但你可以將身體後,立即添加腳本標籤。 – LGSon

+0

我的回答中是否有某些東西缺失並且您接受? – LGSon

回答

2

不,不能(或不應該)強制body onload事件觸發,但您可以在有問題的元素之後立即添加腳本標記。

<a id="beginner">Beginner Level</a> 
<div id="beginner-sub" class="well"> 
    <!-- append content here --> 
</div> 
<script>load();</script> 

做不過請注意,任何其他功能load()取決於必須已經裝載,否則它將無法

2

如果您將代碼中發現,當它被立即執行的腳本標籤中:

<head> 
... 
<script type="text/javascript"> 
    alert("executed now"); 
</script> 
</head> 

這是回答你關於頁面加載前執行代碼的問題。 但是,如果您訪問某個元素,則必須確保在加載該元素後執行此代碼。

p.s.你也可以拆分代碼,在頁面加載之前解析JSON,將結果保存在變量中,然後在頁面加載後追加元素。

+0

是的,雖然作爲腳本訪問元素,但它會失敗,因爲它們尚未加載 – LGSon

+0

您可以拆分代碼,在加載頁面之前解析JSON,將結果保存在變量中,然後在頁面添加後添加元素加載。 它可以解決這個問題 – quirimmo

相關問題