摘要:上面代碼,使用級的方法為按鈕綁定了一個沒有指定任何參數(shù)的事件處理程序,點擊按鈕后,控制臺依次輸出。從結(jié)果可以看出,瀏覽器確實將一個事件對象傳入到事件處理程序,即便事件處理程序沒有指定任何參數(shù)。
我們知道,在觸發(fā)DOM上的某個事件時,會產(chǎn)生一個事件對象,其中包含與事件相關(guān)的所有信息。JS高程中有這樣一句話,兼容DOM的瀏覽器會將一個事件對象傳入到事件處理程序中,無論指定事件處理程序時使用什么方法,DOM0級或是DOM2級別,都會傳入事件對象。
事件處理程序有參數(shù)時直覺上還好理解,但是事件處理程序要是一個參數(shù)都沒有指定,事件對象真的會傳入事件處理程序嗎?
以一個按鈕為樣本,我們可以看看是否真的如此。
var btn = document.getElementById("myBtn"); function showMessage() { console.log("Clicked"); console.log(arguments.length); console.log(arguments[0].type); } btn.onclick = showMessage;
上面代碼,使用DOM0級的方法為按鈕myBtn綁定了一個沒有指定任何參數(shù)的事件處理程序,點擊按鈕后,控制臺依次輸出Clicked、1、click。arguments對象是一個類數(shù)組對象,包含著傳入函數(shù)中的所有參數(shù),利用它,我們可以獲得關(guān)于參數(shù)的信息。從結(jié)果可以看出,瀏覽器確實將一個事件對象傳入到事件處理程序,即便事件處理程序沒有指定任何參數(shù)。
下面,看看事件處理程序指定參數(shù)的情況。
var btn = document.getElementById("myBtn"); function showMessage(event) { console.log("Clicked"); console.log(arguments.length); console.log(arguments[0] === event); console.log(event.type); } btn.onclick = showMessage;
點擊按鈕后,控制臺依次輸出Clicked、1、true、click。從結(jié)果可以得出,傳入一個參數(shù)時,該參數(shù)名成為arguments[0]的別名,參數(shù)和arguments[0]指向同一個對象。因為是別名,所以傳入的參數(shù)名可以是任何合法的標(biāo)識符,之所以使用標(biāo)識符event,是因為它更能表意,也是大家默認(rèn)的習(xí)慣。
現(xiàn)在,可以得出結(jié)論了,無論指定事件處理程序時使用什么方法,事件處理程序始終有一個參數(shù),也就是事件對象,由瀏覽器傳入,保存在arguments[0]。
JavaScript高級程序設(shè)計
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95653.html
摘要:本文就將帶大家深入淺出地了解事件的那些屬性和方法。針對不同級別的,我們的事件處理方式也是不一樣的。當(dāng)然其優(yōu)點是不需要操作來完成事件的綁定。文章地址事件深入淺出二。 在項目開發(fā)時,我們時常需要考慮用戶在使用產(chǎn)品時產(chǎn)生的各種各樣的交互事件,比如鼠標(biāo)點擊事件、敲擊鍵盤事件等。這樣的事件行為都是前端DOM事件的組成部分,不同的DOM事件會有不同的觸發(fā)條件和觸發(fā)效果。本文就將帶大家深入淺出地了解...
摘要:本文是重溫基礎(chǔ)系列文章的第二十篇。事件捕獲為截獲事件提供機(jī)會,然后實際的目標(biāo)接收到事件,最后事件冒泡,對事件作出響應(yīng)。事件處理事件處理,即響應(yīng)某個事件。包括導(dǎo)致事件的元素事件類型等其他信息。 本文是 重溫基礎(chǔ) 系列文章的第二十篇。 這是第三個基礎(chǔ)系列的第一篇,歡迎持續(xù)關(guān)注呀! 重溫基礎(chǔ) 系列的【初級】和【中級】的文章,已經(jīng)統(tǒng)一整理到我的【Cute-JavaScript】的Java...
摘要:事件流與事件委托事件,即文檔或瀏覽器中發(fā)生的一些特定交互的瞬間,我們可以利用事件監(jiān)聽來預(yù)定事件,當(dāng)事件發(fā)生的時候執(zhí)行相應(yīng)的處理程序。本文主要討論事件流的三個階段,及利用事件委托機(jī)制進(jìn)行性能優(yōu)化。 事件流與事件委托 事件,即文檔或瀏覽器中發(fā)生的一些特定交互的瞬間,我們可以利用事件監(jiān)聽來預(yù)定事件,當(dāng)事件發(fā)生的時候執(zhí)行相應(yīng)的處理程序。當(dāng)事件發(fā)生在某個DOM節(jié)點上時,事件在DOM結(jié)構(gòu)中進(jìn)行一級...
摘要:事件事件指可以被偵測到的行為。事件通常與函數(shù)配合使用,當(dāng)事件發(fā)生時函數(shù)才會執(zhí)行。兩家公司對于事件流出現(xiàn)了截然相反的定義。級事件規(guī)定的事件流包括三個階段事件捕獲階段處于目標(biāo)階段事件冒泡階段。我們又把事件處理程序稱為事件偵聽器。 JavaScript事件流 0.DOM級別與DOM事件 首先在介紹DOM事件之前我們先來認(rèn)識下DOM的不同級別。針對不同級別的DOM,我們的DOM事件處理方式也是...
摘要:為屬性賦值匿名函數(shù)事件作用域使用級方法指定的事件處理程序被認(rèn)為是元素的方法。最后這個布爾值參數(shù)如果是,表示在捕獲階段調(diào)用事件處理程序如果是,表示在冒泡階段調(diào)用事件處理程序。 事件捕獲和事件冒泡 DOM2級事件規(guī)定的事件流包括三個階段:事件捕獲、處于目標(biāo)階段和事件冒泡。首先發(fā)生的是事件捕獲,從外部節(jié)點到內(nèi)部節(jié)點依次遍歷,為截獲事件提供了機(jī)會。然后是實際的目標(biāo)接收到事件。最后一個階段是冒泡...
閱讀 2610·2021-11-17 09:33
閱讀 3966·2021-10-19 11:46
閱讀 921·2021-10-14 09:42
閱讀 2266·2021-09-22 15:41
閱讀 4239·2021-09-22 15:20
閱讀 4648·2021-09-07 10:22
閱讀 2320·2021-09-04 16:40
閱讀 826·2019-08-30 15:52