JS筆記-關於在DOM0級別中設置事件處理對象的思考

在JavaScript指定事件處理程序的方式中,有三層,分別是DOM 0 級, DOM 1 級, DOM 2 級。

DOM 0 級是最傳統的形式,主要爲直接給指定元素的某個事件直接指定,

ex: 

<span style="font-family:Microsoft YaHei;font-size:14px;color:#ff6600;">div.onclick = function(){aliert("hello world!")};</span>

在上述過程中,div元素的click事件被賦予了一個匿名函數。

但,請注意:

我們並不能通過DOM 0 級的傳統方法將  帶有指定參數的方法傳遞給指定的事件
請看下面代碼:
<pre name="code" class="html"><span style="font-family:Microsoft YaHei;font-size:14px;color:#ff6600;">function say(s) {
    alert(s);
}
var s1 = "hello";
div.onclick = say(s);</span>



執行這段代碼,我們會發現,在還沒點擊div元素的時候,say(s)就已經被執行了!
經過思考,我認爲是一下原因:div.onclick = say(s); 這行代碼,表達的意思並非是把say(s)這個執行方法傳遞給div的click事件,而是將其執行的結果傳遞給click事件。也就是說,這行代碼是將say(s)的執行結果傳遞給了事件,而非方法本身。於是乎,每一次刷新,都會執行一個say(s)以得到執行的結果。

因此,我嘗試將say(s)兩邊加上雙引號,目的是達到將字符串賦給click事件。
代碼如下:
<span style="font-family:Microsoft YaHei;font-size:14px;color:#ff6600;">function say(s) {
    alert(s);
}
var s1 = "hello";
div.onclick = "say(s)";
</span>

執行發現,當點擊div元素時,並不能執行say(s)中的方法。

綜上,得出結論:通過DOm 0 級傳遞帶參數的實名方法給指定事件,只能通過在標籤上設置的方法。如:
<strong><span style="font-family:Microsoft YaHei;font-size:14px;color:#ff6600;"><div οnclick="say(s)">hello</div></span></strong>

僅此,才能將帶參數的實名方法(如say(s))傳遞給指定事件。
發佈了28 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章