搜尋
首頁web前端js教程JavaScript中關於事件的簡單詳述

JavaScript中關於事件的簡單詳述

Oct 31, 2017 am 09:55 AM
javascriptjs

1.事件處理函數

#  事件是指自動觸發的或使用者手動觸發的物件狀態的改變。

  事件處理函數:當事件觸發時,自動執行的函數

  事件處理函數的本質上是物件的一個特殊屬性,而該屬性指向了一個函數。

  每個元素物件都能觸發各種事件,而每個事件都對應一個事件處理函數。

  當沒有綁定事件處理函數時,依然可以觸發事件,但是由於此時的事件綁定函數為空,所以不會執行任何操作。

  在程式執行時,將對應的函數或語句綁定給物件的某個事件處理函數,那麼一旦該物件的指定事件觸發,瀏覽器就會變回自動執行該物件的事件處理函數中的操作。

  綁定事件處理函數= 為on事件名稱(此函數)賦值

2.基本事件分類

  1.滑鼠事件

    onclick  onbonlick   onmousedown。 多moon onmusemove  

2.鍵盤事件

    onkeydown  onkeyup  

onkeypress

  

3.狀態事件

    onload  onunload  onchange(select)  onfocus(表單)  onblur(表單)  onresize  onsubmit #amit #」關於事件#5#l#.Isubmit #」事件。

# #  為特定的時間定義監聽函數有三種方式:

  1.直接在HTML中定義元素的事件的相關屬性

<p style="margin-bottom: 7px;"><标签 on事件名="fun()/js语句">按钮</标签</p>
<span style="color: #0000ff"><</span><span style="color: #800000">标签 class</span><span style="color: #0000ff">="d1"</span><span style="color: #ff0000"> onclick</span><span style="color: #0000ff">="fun()"</span><span style="color: #0000ff">></span><span style="color: #000000"><span style="color: #ff0000">相当于</span>d1.onclick=function(){
    console.log(this.className);    //d1
    eval("fun()");//[window.]fun
}<br/><strong><span style="color: #ff0000">结论:fun()中this指向window</span></strong></span>
//若要获得当前目标元素对象html:
    onxxx="fun(this)"
js中定义函数时:
    fun(elem);
這種方式違背了「內容和行為相互分離」的原則,應該盡量少用。

  

2.在JavaScript中為元素的事件相關屬性賦值:

elem.on事件名=函数对象;
  這種方式實現了“內容與行為相分離”,但是元素只能綁定一個監聽函數。

  

3.高階事件處理方式,一個事件能夠綁定多個監聽函數:

    DOM標準:elem.addEventListener(「事件名稱」,事件對象,是否在捕獲階段觸發)

    IE8標準:elem.attachEvent("on事件名",事件物件)

btnObj.attachEvent(&#39;onclick&#39;,function(){});        //IE
btnObj.addEventListener(&#39;click&#39;,function(){});    //DOM
...
doucument.body.attachEvent(&#39;onload&#39;,initData);    //IE
document.body.addEventListener(&#39;load&#39;,initData);    //DOM
function(){
    ...
}

  這種方式能夠為一個元素綁定多個監聽函數,但是需要注意瀏覽器相容性問題。

 小範例:反向執行事件處理函數

html:

##css:

js:

 

# 結果:

  原始

#  點選最內層方塊結果:

 

3.

#週期

DOM

  解釋器建立了一個event物件之後,會依照下列程序將其在

HTML元素間進行傳播:    第一階段:事件捕獲,事件物件沿著DOM樹向下傳播(IE中的事件模型中沒有此階段)    第二階段:目標觸發,運行事件監聽函數

    第三階段:事件冒泡,事件沿著DOM樹向上傳播

#  1.事件的冒泡處理機制:

    當處於DHTML物件模型底部物件事件發生時會依序啟動上述物件定義的同類事件的處理

##  結果:

  

 IE

  只有两个阶段,没有捕获

 4.event对象

  任何事件触发之后都会产生一个event对象

  当事件发生时,自动创建,封装了事件信息(keyCode/screenX/screenY...)

  event对象记录事件发生时的鼠标位置,键盘按键状态和触发对象等信息,事件对象的常用属性:

- secElement(IE) / target(DOM)  :    事件源对象
- eventPhase   :    事件传播的阶段
- clientX/offsetX/pageX/screenX/x    :    事件发生时的X坐标
- clientY/offsetY/pageY/screenY/y    :    事件发生时的Y坐标
- which/keyCode/charCode              :    键盘事件中按下的按键
- button    :    鼠标哪个按键被按下
- cancelBubble    :    是否取消事件冒泡
- returnValue     :    是否阻止事件的默认行为

  1.目标元素对象(从一而终)

    1.HTML绑定事件方式

html:
onclick="fun(event)"  //event必须这样写,不能变

    //实际调用时,event会自动获得当前事件的对象
js:
fun(e){
    //e中获取到的就是当前的事件对象
    }

    2.js绑定方式

//DOM标准:自动创建event对象,默认以第一个参数传入自定义的事件处理函数对象
//IE标准:window全局的event属性,当事件发生时,自动创建event对象,保存在window.event中

var e=window.event||arguments[0];
var src=e.srcElement||e.target;

5.取消冒泡和利用冒泡

  1.取消冒泡

DOM标准:e.stopPropagation()

IE标准:e.cancelBubble=true;

用在当前的事件处理函数的末尾

if(e.stopPropagation)
{
    e.stopPropagation();
}else{
    e.cancelBubble=true;
}

  2.利用冒泡

  优化:若多个子元素中定义了相同的事件处理函数,只需要在共同的父元素上定义一次即可

  原理:事件的捕获和冒泡不会受到程序的干扰,当触发子元素时,会捕获到该元素,然后在父元素触发事件。

6.取消事件

if(e.preventDefault){
    e.preventDefault();    //DOM
}else{
    e.returnValue=false;    //IE
}

  何时取消:eg:表单提交之前,若验证未通过,就取消之后的自动提交。

以上是JavaScript中關於事件的簡單詳述的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?在JavaScript中,如何在構造函數中獲取原型鏈上函數的參數?Apr 04, 2025 pm 09:21 PM

在JavaScript中如何獲取原型鏈上函數的參數在JavaScript編程中,理解和操作原型鏈上的函數參數是常見且重要的任�...

微信小程序webview中Vue.js動態style位移失效是什麼原因?微信小程序webview中Vue.js動態style位移失效是什麼原因?Apr 04, 2025 pm 09:18 PM

在微信小程序web-view中使用Vue.js動態style位移失效的原因分析在使用Vue.js...

在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?在Tampermonkey中如何實現對多個鏈接的並發GET請求並依次判斷返回結果?Apr 04, 2025 pm 09:15 PM

在Tampermonkey中如何對多個鏈接進行並發GET請求並依次判斷返回結果?在Tampermonkey腳本中,我們經常需要對多個鏈...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。