2013-04-04 54 views
0

我在修改由第三方項目生成的網頁。該項目本質上是做這樣的事情時,你的瀏覽器請求一個頁面(僞):Javascript:正在運行OnLoad代碼,無法訪問<body>或<head>?

<?php 
include: project's fixed library INCLUDE's 
include: my freeform php code 
?> 

(project's fixed HTML <head>...</head> and <scripts/> sections) 
(project's fixed HTML <body> tag and page header + frames) 

(my freeform php/HTML code) 

(project's fixed HTML footer, frame closures, and </body> tag) 

頁其中包含的生成,並以$ _GET/$ _ POST充填於由PHP表單元素和HTML。我的HTML包含「OnChange = ValidateItems();」大部分領域;當用戶更改頁面上的數據時,如果相關,錯誤消息將內聯顯示。

我想要的也是觸發「ValidateItems();」頁面加載後,當用戶提供的初始用戶提供的值在HTML中設置好後,供用戶使用。但由於上述加載結構,我無法訪問常規或展示位置。我想知道如何讓它發生。

我在想的一個選擇是添加一個微小的不可見框架/ frameset/iframe或其他支持onload並且不依賴於or標籤的對象,並且從onload ='bootstrap'自己,然後手動將onload添加到主體,或者以某種方式掛鉤通常的onload事件,以便在正確的時間調用ValidateItems()一次,然後在設置或完成後退出該代碼段。我不知道什麼是最好的方式來做到這一點 - 我最初如何獲得任何代碼執行,然後我會鉤住或修改等,以便它適當地發生(不太早或遲);技術上來說,這是聯盟。幫助和示例代碼將非常感激。

回答

0

添加這個地方你的「自由HTML」代碼中:

<script> 
    window.onload = ValidateItems; 
<script> 
+0

我又試了這一點(它沒有工作之前),以及它的工作 - 但前提是要驗證的項目後發生了。把它放在HTML格式中,但是在項目被驗證之前,它失敗了,把它放在的末尾,或者在項目被驗證之後,它就起作用了。這是爲什麼? – Stilez 2013-04-04 12:18:15

+0

你確定你已經把'window.onload = ValidateItems'而不只是'ValidateItems()'嗎?使用'window.onload = ValidateItems','ValidateItems'將在整個頁面加載完成後執行。只要調用'ValidateItems()'就會立即執行它,如果你把它放在'ValidateItems'需要訪問的_before_元素中,它就不會工作,因爲它們還沒有被加載。 – pfyod 2013-04-04 12:28:40