2011-11-20 100 views
0

我myclickHandler功能完美地工作,但是當我去到我的錯誤控制檯我得到這個錯誤:我在錯誤控制檯得到一個未定義的錯誤

document.getElementsByName("prequestion")[0] is undefined;

下面是我的代碼

<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
     <title>Create a Session</title> 
<script type="text/javascript"> 

    document.getElementsByName("prequestion")[0].addEventListener('click', myClickHandler); 

    function myClickHandler(){ 
     if(validation()){ 
      openSessionPopup(); 
     } 

    </script> 
    </head> 

<body> 

<form action="create_session.php" method="post" name="sessionform"> 

<p><strong>10: </strong><input class="questionBtn" type="button" value="Prepare Questions" name="prequestion" onClick="myClickHandler()"/></p> 

</form> 
</body> 

我問題是我需要刪除這個錯誤?因爲如果在錯誤控制檯中顯示錯誤,我的功能是否有效?

+1

如果您發佈相關的HTML,並且也準確地描述腳本包含在頁面中的方式和位置,它將非常有幫助。 – Pointy

+1

如果您在DOM完成加載之前加載了這一段代碼,它將不會知道名爲prequestion的第零個元素。您是否嘗試過將它附加到HTML之後或理想地檢查瀏覽器是否報告了加載完成? –

+0

看起來像是缺少myClickHandler()函數的結尾大括號。 – tybro0103

回答

2

在DOM(甚至可能是HTML)正確加載之前,您可能正在加載JavaScript。鑑於以下不

<script type="text/javascript"> 
document.getElementsByName("prequestion")[0].addEventListener('click', myClickHandler); 

function myClickHandler(){ 
    alert('test'); 
    } 
</script> 
<input type="" name="prequestion" /> 

例如,下面抄錄在你的問題中描述了同樣的錯誤。錯誤不存在,代碼工作正常。

<input type="" name="prequestion" /> 
<script type="text/javascript"> 
document.getElementsByName("prequestion")[0].addEventListener('click', myClickHandler); 

function myClickHandler(){ 
    alert('test'); 
    } 
</script> 

嘗試將事件偵聽器附加到技術上不存在但尚未導致問題的元素。如果需要,您可以檢查瀏覽器報告頁面已被加載之前附加事件,但請注意,瀏覽器以不同的方式報告。圖書館的如jQuery提供有用的方法來測試這個功能,比如$(document).ready(function(){});

編輯:我剛剛看到您添加了相關的HTML了。看起來事實上是這樣,並且您仍然看到預期行爲的原因是因爲您還在輸入元素上使用了onclick=""屬性。這就是函數在點擊時被調用的地方,並且事件處理程序沒有像你期望的那樣被附加。

編輯#2:你也似乎錯過了關閉你的功能}。而且我現在已經用您的確切HTML進行了測試,並將腳本移動到正文標籤的正上方以解決錯誤,並將該功能正確地附加到click事件。

<head> 
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <title>Create a Session</title> 
</head> 

<body> 
<form action="create_session.php" method="post" name="sessionform"> 
<p><strong>10: </strong><input class="questionBtn" type="button" value="Prepare Questions" name="prequestion" /></p> 
</form> 
<script type="text/javascript"> 
    document.getElementsByName("prequestion")[0].addEventListener('click', myClickHandler); 

    function myClickHandler(){ 
     alert('test'); 
    } // This was missing 
    </script> 
</body> 
+0

謝謝修復它,我只是在表單下創建了另一個腳本,並在這些腳本之間包含了document.getElement ...和myClickHandler函數標籤 – BruceyBandit

0

我懷疑問題是沒有名稱屬性設置爲「prequestion」的元素。

如果你得到這個錯誤,那麼你的腳本實際上不工作,所以你應該修復它。

+0

感謝您提供這些信息,我知道下一次組織我的javascript代碼時要做什麼 – BruceyBandit