2012-04-27 69 views
2
<p id="specialp">some content</p> 
<script> 
document.getElementById('specialp').onclick=alert('clicked'); 
</script> 

我剛剛開始與JavaScript,我不明白爲什麼警告是頁面加載時執行,但不是當我單擊該段落。onclick事件 - 爲什麼JavaScript運行它onload

的處理工程,我希望當我把它內聯,就像這樣:

<p id="specialp" onclick="alert('clicked')" >some content</p> 

回答

4

這是因爲你沒有包裹onclick分配作爲一個實際的功能,所以它會嘗試的alert('clicked')結果分配給onclick事件處理程序(這意味着在分配時可能爲undefined)。你需要做的是一個函數分配給該處理程序,像這樣:

document.getElementById('specialp').onclick = function() 
{ 
    alert('clicked'); 
}; 

當你在HTML同樣的事情,在DOM會自動包裝在你函數的內容。

+0

不是alert()函數本身嗎?這是否意味着,如果以某種方式alert()返回true,則此方法將起作用? 另外,它爲什麼在頁面加載後執行? – Atheus 2012-04-27 18:30:04

+0

'alert'是一個函數,但是你並沒有爲它分配函數,而是將表達式'alert('clicked')'分配給onclick對象。表達式作爲賦值的一部分進行評估。你在技術上與'var x = 4 + 2'沒有區別。該腳本在加載時運行,並將'6'分配給'x',而不是在稍後使用'x'時的點。 – Tejs 2012-04-27 18:36:57

+0

如果我想在函數中使用元素的某個屬性,我將如何將參數中的對象傳遞給該函數,結果如何?我使用這個頁面上的所有元素,所以我不能使用getElementById()函數。 – Atheus 2012-04-27 18:53:36