2016-11-11 70 views
0

所以我的代碼有問題的部分如下情態動詞和表單

var manuSu = document.getElementById("Man"); 
 

 
manuSu.onclick = function(){ 
 
    for(i=0; i<8;i++){ 
 
    periodEnd[i] = document.getElementById("pE").elements.item(i).value; 
 
    } 
 
    modal.style.display = "none"; 
 
}

「人」是一個按鈕,「PE」是一種形式。我已經運行在Chrome的代碼,並得到錯誤

遺漏的類型錯誤:不能設置爲空(...)的特性「的onclick」

我已經做了谷歌搜索約30分鐘,顯然它有什麼做的模態。無論是形式和按鈕都包含在模式

編輯: 除非您之前曾宣佈從一個包含範圍內的for循環的i變量,意識到你將宣佈一個全局變量(一個貧窮的做法)。

+0

請在您定義「Man」按鈕的位置顯示html代碼。 – gus27

+0

manuSu是''null'',這意味着''document.getElementById''找不到''id''並且不得不''返回null。 – Crowes

回答

0

問題是你的<div id="Man"></div>不存在於那一刻,然後執行這段代碼。在顯示模態之後運行它,然後<div id="Man"></div>位於DOM中。

此外,您可以使用jQuery框架,在那裏您可以將事件偵聽器附加到那個時刻不存在的對象上,但可以稍後顯示。

+0

您能否爲我提供一個事件監聽器或資源的示例來學習它。我不太瞭解jQuery。 –

0

根據您提供的內容很難診斷錯誤。然而,根據Chrome的拋出錯誤,我能想到的一個可能的問題與<script>加載有關。例如,如果您沒有將代碼包裝到window.onload事件偵聽器(或其等效的jQuery,$(document).ready())中,那麼您很可能遇到諸如遇到的問題。這個問題源於這樣一個事實:在您的函數執行之前,DOM尚未完全分析/呈現。因此,當它尋找id屬性#Man的東西時,它返回null,因爲沒有這樣的元素尚未附加到DOM。 onload(或ready)事件處理程序通過推遲腳本執行直到DOM完全呈現來消除此問題。爲此,移動含有您的功能的<script>標籤也是有幫助的,因爲它是<body>元素的結束標記(</body>)之前的最後一個元素。由於HTML頁面是線性讀取的(,即,從左到右,從上到下),因此將<script>委託給HTML頁面中的此位置意味着它將不會被點擊,直到整個document.body已被渲染並且顯示。