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