2011-10-12 61 views
1

我在此之前發佈並收到了一個很好的答案 - 但是在進一步使用時,代碼顯示Firebug中的錯誤,並且在測試中無法正常工作。Javascript在JSFiddle中工作 - 瀏覽器顯示爲「Undefined」

Original question

JSFiddle solution

螢火蟲錯誤顯示:document.getElementsByName( 「licenseAgreement」)[0]是未定義的(線1)

任何幫助,將美妙。

+0

你有一個'name'屬性爲* licenseAgreement *的元素嗎? – alex

+0

也許你的瀏覽器不支持'getElementsByName()'函數。 – tskuzzy

+1

我不知道它是一個onload/domready的東西。也許當js被執行時,「licenseAgreement」dom El還沒有被解析。把它扔出去。也許包裝你的代碼,document.onload = function(/ *現有的代碼在這裏* /){};看看是否是這樣。 – seanh

回答

1

無數問題。最可能的主要問題是您在加載頁面之前運行代碼,因此licenseAgreement對象尚未生效。以下是你應該改變的事情的總結。

第一個,由於幾個原因,此代碼在IE9之前無法在IE中工作。在IE9中沒有正確支持getElementsByName,在IE9之前完全不支持addEventListener。您必須在其他瀏覽器中使用IE和addEventListener。有關代碼,請參閱下面的jsFiddle。

,我建議你更改爲document.getElementById(),給你的目標元素,而不是nameid值。這將爲您提供所需的確切元素,並且支持跨瀏覽器。請參閱下面的jsFiddle以瞭解如何使用getElementById

,你不告訴我們的實際工作頁面,但我的猜測是,你正在運行的代碼添加一個eventListener頁面加載完成這將意味着它無法找到前licenseAgreement對象,因爲它尚未被解析並加載到頁面中。只是一個猜測,因爲你沒有向我們展示失敗的實際頁面。您可以將初始化代碼移動到HTML主體的末尾,也可以在頁面加載完成後才能調用它,方法是掛鉤頁面加載事件並從那裏調用它。您的jsFiddle可能會工作,因爲您已經在jsFiddle中指定了您不希望代碼在加載頁面之前運行(jsFiddle功能)。

+0

非常感謝!但JSFiddle頁面不工作:( – Ashley

+0

我轉換到document.getElementById,我得到一個錯誤代碼只在兩個地方使用相同的ID ...仍然有點混淆代碼分支......' document.getElementById(「terms」)[0] .addEventListener(「scroll」,checkScrollHeight,false);' – Ashley

+0

nvm ...現在在所有瀏覽器中工作:) – Ashley

相關問題