1. 程式人生 > >HTML 事件(二) 事件的註冊與登出

HTML 事件(二) 事件的註冊與登出

  本篇主要介紹HTML元素事件的註冊、登出的方式。

其他事件文章

2. HTML 事件(二) 事件的註冊與登出

目錄

1. 註冊事件:介紹通過元素的事件屬性、addEventListener()以及attachEvent()方法進行事件的註冊。

2. 登出事件:介紹通過removeEventListener()、detachEvent()以及事件屬性賦值為null來進行事件的登出。

1. 註冊事件

註冊事件的方式其實有2種:一種屬性註冊,另一種通過方法註冊

屬性註冊方式又可分為在HTML元素內的事件屬性賦值和通過JS指定元素物件的事件屬性。

1.1 設定HTML元素屬性為事件處理程式

說明:在HTML頁面中,設定元素屬性為一個函式。

語法:<button onlick="sayHello()">點選</button>

注意:事件屬性是以"on"開頭,後面跟著事件名稱。如:onclick、onload。

示例

JS程式碼:

function sayHello() {
    console.log('hello')
}

HTML程式碼:

<button onclick="sayHello()">點選</button>

1.2 通過JS設定元素物件的屬性為事件處理程式

說明:通過JS獲取元素的物件,設定其事件屬性為一個事件處理程式。

語法:EventTarget.onEventName=function(e){};

注意:事件屬性是以"on"開頭,後面跟著事件名稱。如:onclick、onload。

唯一性:屬性註冊具有唯一性;同一個事件,最後註冊的處理程式將會覆蓋前面註冊的處理程式。

示例1:事件屬性註冊的演示

// 註冊body的click事件
document.body.onclick = function (e) {
    alert(1);
};

示例2:事件屬性註冊的唯一性

document.body.onclick=function(e){
    console.log(1);
}

// 會覆蓋前面註冊的事件處理程式
document.body.onclick=function(e){
    console.log(2);
}

document.body.click(); // => 2 :只輸出後面屬性註冊的

1.3 addEventListener()方法註冊事件

說明:在JS中,window、document、HtmlElement等物件可以通過addEventListener()方法註冊事件的處理程式。

語法:EventTarget.addEventListener(eventName, eventHandler, |useCapture )

引數

①eventName {string} :所要註冊的事件名稱,不區分大小寫。此名稱不需要像註冊事件屬性那樣字首加上"on"。如註冊滑鼠點選事件,寫為click。

②eventHandler {function | function Object} :函式或者函式物件。事件觸發時所需要執行的函式;當使用函式物件多次註冊同一事件時,只當註冊一遍。

③useCapture {boolean} 可選 :是否處於捕獲階段,預設為false。

多次註冊:addEventListener()方法能為同一個物件的同一事件註冊多次。當發生此事件時,註冊的處理事件程式將按照註冊先後順序執行。

注意

①IE9之前的IE的不支援此方法,可使用attachEvent()代替。

②若使用相同的事件處理程式物件多次註冊在同一個事件上,只算註冊一次。

示例1:多次註冊同一事件,按註冊順序執行,先輸出1,再輸出2

document.body.addEventListener('click',function(e){
     console.log('1');
});
        
document.body.addEventListener('click',function(e){
    console.log('2');
});

document.body.click(); // => 1,2

示例2:使用函式物件多次註冊同一事件:只當註冊一次

function sayHello(){
    console.log('hello');
}

document.body.addEventListener('click',sayHello);
// 使用處理程式多次註冊同一事件,只當註冊一次
document.body.addEventListener('click',sayHello);

document.body.click(); // => hello :只輸出一遍

1.4 attachEvent()方法註冊事件

說明:IE9之前的IE版本可通過此方法註冊事件。

語法:EventTarget.attachEvent(eventName, eventHandler)

①eventName {string} :所要註冊的事件名稱,區分大小寫。這裡的名稱跟事件屬性一樣,以"on"開頭,後面跟著事件名稱。如:onclick、onload。

②eventHandler {function | function Object} :函式或者函式物件。事件觸發時所需要執行的函式;當使用函式物件多次註冊同一事件時,可註冊多次(addEventListener()方法只當註冊一次)。

多次註冊:attachEvent()方法能為同一個物件的同一事件註冊多次。當觸發此事件時,也會依次執行。

示例:

function say(){
    console.log('1');
}
document.body.attachEvent('onclick',say);
document.body.attachEvent('onclick',say); // say第二次註冊同一事件

document.body.click(); // => 1 1 :輸出了2次say函式

1.5 JQuery中的事件註冊方式

JQuery中的事件註冊方式對多瀏覽器的差異性進行了解決:判斷元素是否含有addEventListener()或者attachEvent()方法。

示例:

function add(element,type, eventHandle){
	if (element.addEventListener) {
		element.addEventListener(type, eventHandle, false);
	} else if (element.attachEvent) {
		element.attachEvent("on" + type, eventHandle);
	}
}

2. 登出事件

可以註冊元素的事件, 相應的可以也登出元素的事件。

2.1 removeEventListener(eventName, function Object) 

語法:EventTarget.removeEventListener(eventName, eventHandlerObj)

引數

①eventName {string} :所要登出的事件名稱,不區分大小寫。此名稱不需要像註冊事件屬性那樣字首加上"on"。如註冊滑鼠點選事件,寫為click。

②eventHandlerObj {function Object} :函式物件。傳入一個函式體是沒有效果的。

示例1:通過addEventListener()登出事件

function sayHello(e) {
    console.log('1');
}

// 註冊body click事件
document.body.addEventListener('click', sayHello);

// 登出body click事件的sayHello函式
document.body.removeEventListener('click',sayHello);

document.body.click(); // 觸發click事件,不輸出任何結果

示例2:若第二個引數為函式體,將不會登出

function sayHello(e) {
    console.log('1');
}

// 註冊body click事件
document.body.addEventListener('click', sayHello);

// 第二個引數為函式體,雖然跟sayHello函式的內容一樣,但不會登出
document.body.removeEventListener('click', function(e) {
    console.log('1');
});

document.body.click(); // => 1 :輸出結果為1,並沒有登出成功

2.2 detachEvent(eventName, function Object) 

說明:登出通過attachEvent()註冊的事件處理程式。

語法:EventTarget.detachEvent(eventName, eventHandlerObj)

引數

①eventName {string} :所要登出的事件名稱,區分大小寫。這裡的名稱跟事件屬性一樣,以"on"開頭,後面跟著事件名稱。如:onclick、onload。

②eventHandlerObj {function Object} ::函式物件。傳入一個函式體是沒有效果的。

示例1:通過detachEvent()登出事件

function sayHello() {
    console.log('1');
}
document.body.attachEvent('onclick', sayHello);

document.body.detachEvent('onclick', sayHello); // 登出事件

document.body.click(); // 不輸出結果

示例2:若第二個引數為函式體,將不會登出

function sayHello() {
    console.log('1');
}
document.body.attachEvent('onclick', sayHello);

// 第二個引數為函式體,雖然跟sayHello函式的內容一樣,但不會登出
document.body.detachEvent('onclick', function (e) {
    console.log('1');
});
document.body.click(); // => 1 :輸出結果為1,並沒有登出成功

示例3:多次註冊與多次登出

因為attachEvent()可以把一個函式物件多次註冊到元素同一個事件上,所以呼叫一次detachEvent()只能登出掉一次。

function sayHello() {
    console.log('1');
}
document.body.attachEvent('onclick', sayHello);
document.body.attachEvent('onclick', sayHello); // 註冊了2次

document.body.click(); // => 1 1:輸出2次

document.body.detachEvent('onclick', sayHello); // 登出1次

document.body.click(); // => 1 :輸出結果為1,只登出了1次

2.3 取消事件

給物件的事件屬性賦值為null,可取消此事件的所有註冊過的處理事件程式。

示例:

document.body.addEventListener('onclick', function(e){
    console.log(1);
});
document.body.addEventListener('onclick', function(e){
    console.log(2);
});

document.body.onclick=null; // onclick屬性賦值為null,相當於登出了onclick事件

document.body.click(); // 無操作

相關推薦

HTML 事件() 事件註冊登出

  本篇主要介紹HTML元素事件的註冊、登出的方式。 其他事件文章 2. HTML 事件(二) 事件的註冊與登出 目錄 1. 註冊事件:介紹通過元素的事件屬性、addEventListener()以及attachEvent()方法進行事件的註冊。 2. 登出事件:介紹通過remove

d3事件():事件的觸發自定義事件

      在第4版中,d3新增了事件的觸發函式dispatch,類似於jquery的trigger函式,用於觸發dom元素的事件處理函式。並且,d3的選擇集合還可以註冊任意名稱的事件與相關的事件處理函式,即自定義事件。       假定頁面中還存在文章”d3

javascript中事件對象註冊刪除

ie8 ply 設置 als google 一個 標簽設置 this ... 事件對象 註冊事件 直接給dom對象設置屬性,只能給對象設置一個屬性,如果設置多個事件處理函數,則最後的生效; 給html標簽設置屬性,(若法1和法2同時使用,則法1生效); 事件註冊 綁定事件

SpringCloud() 服務註冊發現Eureka

圖片 borde 引入 vat red images .cn epo round 1.eureka是幹什麽的? 上篇說了,微服務之間需要互相之間通信,那麽通信就需要各種網絡信息,我們可以通過使用硬編碼的方式來進行通信,但是這種方式

gendisk,requestbio結構體,以及塊裝置驅動註冊登出,以及載入解除安裝

struct bio *bio; bio是這個請求中包含的bio結構體的連結串列,驅動中不宜直接存取這個成員,而應該使用後文將介紹的rq_for_each_bio()。 char *buffer; 指向緩衝區的指標,資料應當被傳送到或者來自這個緩衝區,這個指標是一個核心虛擬地址,可被驅動直接引用。 uns

JavaScriptHTML交互——事件

異步 相似性 方式 規律 tar asc dom元素 運行 rem JavaScript和HTML的交互是通過事件實現的。JavaScript采用異步事件驅動編程模型,當文檔、瀏覽器、元素或與之相關對象發生特定事情時,瀏覽器會產生事件。如果JavaScript關註特定類型事

WebView使用詳解()——WebViewClient常用事件監聽

前言:生活的艱難,更會激發對夢想的渴望,但艱難的生活卻往往會成為夢想的絆腳石上篇給大家簡單講了Webview中Native程式碼與JS相互呼叫的方法,這篇我們再講講有關各種攔截與處理的東東。一、WebViewClient1、概述前面我們雖然實現了互動,但可能我們會有一個很簡單

HTML 事件(三) 事件事件委託

    本篇主要介紹HTML DOM中的事件流和事件委託。 其他事件文章 3. HTML 事件(三) 事件流與事件委託 目錄 1. 事件流   1.1 何為事件流 2. 事件委託     2.3.2 on() 1. 事件流 (Event Flow

Android事件分發機制:viewGroupview對事件的處理

## 前言 很高興遇見你~ 在上一篇文章 [Android事件分發機制一:事件是如何到達activity的?](https://juejin.cn/post/6918272111152726024) 中,我們討論了觸控資訊從螢幕產生到傳送給具體 的view處理的整體流程,這裡先來簡單回顧一下: ![整體

spring揭秘 讀書筆記 BeanFactory的對象註冊依賴綁定

oct anr ctx nfc col line 增加 sso default 本文是王福強所著<<spring揭秘>>一書的讀書筆記 我們前面就說過,Spring的IoC容器時一個IoC Service Provider,並且IoC

短信發送接口被惡意訪問的網絡攻擊事件()肉搏戰-阻止惡意請求

forward 四種 策略 author 熱鬧 tar 無聊 image 哈哈 圖形驗證碼+ip(用戶id)+https http://www.cnblogs.com/han-1034683568/p/7040417.html 前言 承接前文《短

事件類型--鍵盤文本事件

ascii碼 undefine ima 文本 eof shift .com 攔截 使用 3個鍵盤事件,如下: keydown:當用戶按下鍵盤上的任意鍵時觸發,而且如果按住不放的話,會重復觸發此事件。 keypress:當用戶按下鍵盤上的字符鍵時觸發,而且如果按住不放的話,

jQuery-3.事件篇---事件綁定解綁

cto 最大 匹配 -- regular nbsp 事件處理程序 多個 快捷方式 on()的多事件綁定 之前學的鼠標事件,表單事件與鍵盤事件都有個特點,就是直接給元素綁定一個處理函數,所有這類事件都是屬於快捷處理。翻開源碼其實可以看到,所有的快捷事件在底層的處理都

Spring Cloud():服務註冊發現 Eureka【Finchley 版】

LEDE .com Go eureka clean 英文逗號 開始 效果 sam Spring Cloud(二):服務註冊與發現 Eureka【Finchley 版】 發表於 2018-04-15 | 更新於 2018-05-07 | 上一篇主要介紹了相關理論,這一

Java事件監聽機制觀察者設計模式

idea demo1 script 操作 alt face ner over 方法 一. Java事件監聽機制 1. 事件監聽三要素: 事件源,事件對象,事件監聽器 2. 三要素之間的關系:事件源註冊事件監聽器後,當事件源上發生某個動作時,事件源就會調用事件監聽的一個方法,

springcloud服務註冊發現(

com 1.8 負載 private host wired 負載均衡 sco .class Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目

Android異步框架RxJava 1.x系列() - 事件事件序列轉換原理

方式 名稱 pri 新的 pos strong 之一 調度 star 前言 在介紹 RxJava 1.x 線程調度器之前,首先引入一個重要的概念 - 事件序列轉換。RxJava 提供了對事件序列進行轉換的支持,這是它的核心功能之一。 正文 1. 事件序列轉換定

監聽器、事件事件源、事件註冊深度剖析

left local ets clas imp for 圖形 沒有 執行 AWT事件處理 事件處理機制,幾類具有典型代表意義的事件: 幾種常用事件處理機制 查看JDK Doc文檔中的 用戶圖形界面的行為 1、事件類型 (1)事件類的層次

HTML的文檔結構語法(

單選 eset 跳轉頁面 right 寬度 lin tab ren refresh 3.7 超鏈接標記 語法:<a 屬性=“值”>對當前鏈接的描述</a> 作用:網頁進行跳轉 常用的屬性: Href:鏈接的網址或ip或地址 值:就是具體

、服務註冊發現

1、SpringCloud簡介 Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。 Spring Cloud包