首頁 web前端 js教程 JS的事件綁定深入認識_javascript技巧

JS的事件綁定深入認識_javascript技巧

May 16, 2016 pm 04:43 PM
事件綁定

一、傳統事件模型

傳統事件模型中存在限制。

內嵌模型以HTML標籤屬性的形式使用,與HTML混合,這種方式無疑造成了修改以及擴充的問題,已經很少使用了。

腳本模型是將事件處理函數寫入js檔案中,從頁面取得元素進行對應事件函數的綁定以觸發執行。但也存在不足之處:

1.一個事件綁定多個事件監聽函數,後者將覆蓋前者。

2.需要限制重複綁定的情況

3.標準化event物件

二、現代事件綁定

DOM2級事件定義了兩個方法用於添加、刪除事件:addEventListener()、removeEventListener().他們分別接收三個參數:事件名、函數、冒泡或捕獲的布爾值(true表示捕獲,false表示冒泡)。

與之對應,IE提供了類似的兩個方法attachEvent()和detachEvent(),但IE的兩個方法存在另外的問題:無法傳遞this物件(IE中的this指向window)可以使用call方法進行物件冒充:

function addEvent(obj,type,fn){ 
if(typeof obj.addEventListener != 'undefined'){ 
obj.addEventListener(type,fn,false); 
}else if(obj.attachEvent != 'undefined'){ 
obj.attachEvent('on' + type,function(){ 
fn.call(obj,window.event); 
}); 
} 
};
登入後複製

但由於新增時執行的是匿名函數,因此新增後無法進行刪除;另外IE提供方法還會有無法依序執行綁定事件、存在記憶體洩漏的問題。

為了解決這一系列的問題,就必須對方法進行進一步的封裝,對其他瀏覽器使用DOM2級標準進行,對於IE,採用基於傳統模式的添加、刪除,思路為:

1.新增是使用JS的散列表儲存物件事件,為每一個物件事件分配一個ID值,按新增的呼叫順序,先判斷是否存在相同的處理函數,不存在的話就依次將事件綁定函數加入到散列表中,這樣解決了無法順序執行以及重複添加的問題

2.刪除時進行遍歷函數配對的判斷,存在則刪除

總結:

之前對JS的事件綁定並沒有太深的認識,甚至停留在傳統事件綁定模型上,對程序實現上還是認識太淺,這次學習封裝庫這部分內容時,才學習到很多JS上物件導向的應用。雖然類似JQuery的這樣js函式庫已經實現了很好的資料綁定機制的封裝效果,但只知其然,不知其所以然還有會有種蒙在鼓裡的感覺,親自去分析一下具體的實現,會有一種豁然開朗的感覺,也體會到,做好一個兼容性、通用性強的程序更要考慮很多內容,解決很多問題,也正在在這些問題中逐漸清楚很多的。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

jquery綁定事件有幾種方式? jquery綁定事件有幾種方式? Nov 09, 2020 pm 03:30 PM

jquery綁定事件有4種方式,分別為:bind()、live()、delegate()和on()方法;其中bind()方法只能針對已經存在的元素進行事件的綁定,而live( )、on()、delegate()皆支援未來新新增元素的事件綁定。

解決UniApp報錯:'xxx'事件未綁定的問題 解決UniApp報錯:'xxx'事件未綁定的問題 Nov 25, 2023 am 10:56 AM

使用UniApp開發應用程式時,可能會遇到以下錯誤提示:'xxx'事件未綁定。這是由於UniApp的事件綁定機制所導致的,需要正確設定才能解決問題。一、問題原因在UniApp中,頁面元件的事件綁定是透過v-on指令完成的。例如,在範本中加入按鈕元件:<button@click="onClick">點擊我</butto

怎麼給元素添加事件? JS綁定事件三種方式解析 怎麼給元素添加事件? JS綁定事件三種方式解析 Aug 04, 2022 pm 07:27 PM

javascript作為腳本語言, 可以為頁面上的元素綁定事件,用於在指定事件發生時能自動調用相應的事件處理程序處理事件。那怎麼給元素添加事件?以下這篇文章跟大家介紹一下JS綁定事件三種方式,希望對大家有幫助!

jquery綁定事件有什麼作用 jquery綁定事件有什麼作用 Mar 20, 2023 am 10:52 AM

jquery綁定事件的作用:將普通的事件event綁定在DOM節點上,當DOM節點選取時,將事件與之綁定,方便使用者提供對應的動作。 jQuery中提供了四種事件綁定方式,分別是bind、live、delegate、on,對應的解除監聽的函數分別是unbind、die、undelegate、off。

深度探討jQuery事件綁定技術 深度探討jQuery事件綁定技術 Feb 26, 2024 pm 07:36 PM

jQuery是一種流行的JavaScript庫,廣泛用於處理Web頁面的互動性。其中,事件綁定是jQuery的重要功能之一,透過事件綁定可以實現對使用者互動操作的回應。本文將探討jQuery事件綁定技術,並給出具體的程式碼範例。一、事件綁定的基本概念事件綁定是指在DOM元素上新增事件監聽器,以便在特定事件發生時執行指定的操作。在jQuery中,透過選擇器選取需

Vue應用程式中遇到'click'事件綁定無效怎麼辦? Vue應用程式中遇到'click'事件綁定無效怎麼辦? Jun 24, 2023 pm 03:51 PM

Vue是一款流行的JavaScript框架,用於建立現代的Web應用程式。在Vue中,我們通常會使用指令來實作DOM元素的操作。其中,"click"事件是常用的一個指令之一,然而,在Vue應用程式中,我們經常會遇到"click"事件綁定無效的情況。本文將介紹解決此問題的方法。檢查元素是否存在第一步是確認要綁定"click"事件的元素是否存在。如果元素不存在,

Vue文檔中的事件綁定函數參數的使用方法 Vue文檔中的事件綁定函數參數的使用方法 Jun 20, 2023 pm 02:06 PM

Vue是一個流行的JavaScript框架,它採用了資料驅動的想法來簡化開發流程。 Vue的事件綁定功能是非常強大的,可以對頁面中的各種互動進行處理。在Vue的開發過程中,常常會使用到事件綁定函數參數,本文將詳細介紹這個功能的使用方法。在Vue中,可以使用v-on指令來綁定事件。 v-on指令後面跟著事件名和事件處理函數,例如:<bu

深入剖析jQuery事件綁定技巧 深入剖析jQuery事件綁定技巧 Feb 26, 2024 pm 06:33 PM

jQuery是一種流行的JavaScript庫,它簡化了網頁開發中的許多常見任務,其中包括元素選擇、DOM操作和事件處理。在jQuery中,事件綁定是非常常見且重要的操作之一。本文將詳細探討jQuery中事件綁定的方法,並透過具體的程式碼範例來幫助讀者更好地理解和應用這些方法。 1.bind()方法bind()方法是最傳統、最常用的事件綁定方法之一。它可

See all articles