在原生js中的事件監聽方法

一、傳統事件綁定方法
我們在學習的時候,最初接觸的事件綁定方式大多是傳統事件綁定方法。傳統事件綁定方法事例如下:

window.οnlοad=function(){alert("頁面已加載");
}
document.getElementById("btn").οnclick=function(){alert("按鈕被點擊");
}
document.οnmοusemοve=function(){console.log("鼠標在移動");
}

  

傳統事件綁定方法的特點如下:

  1. 事件名稱之間一定要加上on,比如:onclick、onload、onmousemove。

  2. 兼容主流的瀏覽器,包括低版本的IE。

  3. 當同一個元素綁定多個事件時,只有最后一個事件會被添加,并且傳播模式只能是冒泡模式。

二、addEventListener()
方法事例:

window.addEventListener('load',init,false);function init(){alert("頁面加載成功");
}
// 下面寫法與上面等價
window.addEventListener('load',function(){alert("頁面加載成功");
},false);

  

addEventListener()方法特點:

element.addEventListener(event, function, useCapture)中的第三個參數可以控制指定事件是否在捕獲或冒泡階段執行。true - 事件句柄在捕獲階段執行。false- 默認- 事件句柄在冒泡階段執行。

addEventListener() 可以給同一個元素綁定多個事件,不會發生覆蓋的情況。如果給同一個元素綁定多個事件,那么采用先綁定先執行的規則。

addEventListener() 在綁定事件的時候,事件名稱之前不需帶 on 。

注意該方法的兼容性,如果要兼容 IE6-8 ,不能使用該方法,可以采用以下方法。

可以使用 removeEventListener() 來移除之前綁定過的事件。

// 向 <div> 元素添加事件句柄
document.getElementById("myDIV").addEventListener("mousemove", myFunction);

// 移除 <div> 元素的事件句柄
document.getElementById("myDIV").removeEventListener("mousemove", myFunction);

三、attachEvent()
方法事例:
window.attachEvent('onload',function(){
  alert("頁面加載成功");
});

attachEvent()方法特點:

attachEvent是 IE 有的方法,它不遵循W3C標準,而其他的主流瀏覽器如FF等遵循W3C標準的瀏覽器都使用addEventListener,所以實際開發中需分開處理。

attachEvent()是 后綁定先執行。

綁定時間時,attachEvent必須帶 on,如 onclick,onmouseover 等

?

?

在我們實際的項目里面,在使用原生js綁定事件的時候,大多數情況下會使用 addEventListener() ,因為目前來說很少有人使用低版本IE了,大多數項目不會要求兼容 IE6-8 。
如果項目要求兼容 IE6-8 ,這個時候可以考慮 attachEvent(),但是不建議這樣使用,這樣的話需要些兼容代碼,不僅繁瑣而且容易出錯,這個時候就建議使用jQuery庫直接進行事件綁定,jQuery已經幫我們做好了兼容處理的工作,直接飲用,提高效率。
---------------------

原文來自:https://blog.csdn.net/fengzhen8023/article/details/81453753

?

轉載于:https://www.cnblogs.com/zz-com/p/9959259.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249019.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySql修改數據庫編碼為UTF8

mysql 創建 數據庫時指定編碼很重要&#xff0c;很多開發者都使用了默認編碼&#xff0c;亂碼問題可是防不勝防。制定數據庫的編碼可以很大程度上避免倒入導出帶來的亂碼問題。 網頁數據一般采用UTF8編碼&#xff0c;而數據庫默認為latin 。我們可以通過修改數據庫默認編碼方式…

第六次作業(C語言)

心得體會 該題主要涉及知識點有&#xff1a;1、函數的定義&#xff1b;2、函數的調用&#xff08;即prime函數的調用&#xff09;&#xff1b;3、素數的判斷&#xff1b;4、大小排序。 看到題時我首先想到了嵌套循環&#xff0c;可是仔細一看題目要求的是用prime函數的調用&…

Javascript系列——對象元素的數組去重實現

概要 這是一篇記錄文&#xff0c;記錄數組操作對象去重的實現。 需求 有這樣一個數組 [{_id: 123,name: 張三 },{_id: 124,name: 李四 },{_id: 123,name: 張三 }] 實際上我們只需要 [{_id: 123,name: 張三 },{_id: 124,name: 李四 }] 去重 簡單數組的去重 Array.from(new Set([…

關于__getattribute__

先看一個案例 class Tree(object):def __init__(self,name):self.namenameself.cateplantdef __getattribute__(self, item):if item大樹:print(log 大樹)return 我愛大樹else:return object.__getattribute__(self,item)aaTree(rrrr) print(aa.name) print(aa.cate) 運行結果…

通過Navicat for MySQL遠程連接的時候報錯mysql 1130的解決方法

來源&#xff1a;互聯網 作者&#xff1a;佚名 時間&#xff1a;10-16 18:41:20 【大 中 小】 錯誤代碼是1130&#xff0c;ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server 是無法給遠程連接的用戶權限問題 Navicat for mysql 1130錯誤 用…

Java Language Changes for Java SE 9

Java9引入了module模塊的概念&#xff0c;是類與接口和數據資源的一種封裝&#xff0c;并可以聲明與其他模塊的依賴關系。這里總結一下Java9帶來的新特性。更簡練的try-with-resources語句final Resource resource1 new Resource("resource1");//a final resourceRe…

ProtocolHandler繼承體系

轉載于:https://www.cnblogs.com/GooPolaris/p/10815072.html

mysql數據庫存儲過程及調用方法

mysql數據庫存儲過程及調用方法 mysql5.0以后就支持存儲過程了&#xff0c;目前mysql的6.0Alpha版也已經推出。6.0不僅支持大型數據庫如oracle等的絕大部分功 能&#xff0c;如存儲過程、視圖、觸發器、job等等&#xff0c;而且修正了這些功能所存在的bug&#xff0c;其中6.0.1…

紅蜻蜓

日本人なら一度は耳にしたことのある曲でしょう。忘れかけている里山の風景が目に浮かびます。このあたりは昔養蠶が盛んで、何処へ行っても桑畑があったものでしたが、最近はとんと見かけません。小さい頃、よく桑の実をつんで食べたものでした。&#xff08;このあたりでは&q…

elastic學習筆記

要點 不同工具之間版本匹配很重要由點及面&#xff0c;先實踐起來再學細節的原理和使用 技術棧 laravel5.5框架scout組件elasticsearch6.3.0搜索引擎輔助 elasticsearch-head 查看集群數據可視化 中文分詞插件Ik介紹 laravel是一款現代化的php框架es是搜索引擎es-head是管理查看…

mysql 存儲過程中limit

mysql 存儲過程中limit 1、mysql的高版本&#xff08;5.5&#xff09;&#xff0c;存儲過程中的limit可以使用變量&#xff0c;如下&#xff1a;select * from student limit iStart,iNum; 2、mysql的低版本&#xff08;5.1&#xff09;&#xff0c;存儲過程中的limit不能使用…

高頻ES6

var promise new Promise((resolve, reject)> {if (操作成功) {resolve (value)}else{reject(error)} }) promise.than(function (value) {/*成功*/}, function(value) {/*失敗*/}) Promise是異步編程的一種解決方案, 比傳統的解決方案--回調函數和事件更加強大.由社區最早…

NodeJS+Express+MongoDB - 張果 - 博客園

目錄 一、MongoDB 1.1、安裝MongoDB 1.1.1、配置運行環境1.1.2、運行MongoDB1.2、數據庫操作 1.2.1、創建數據庫與查看數據庫1.2.2、刪除數據庫1.2.3、插入數據1.2.4、查詢數據1.2.5、修改1.2.6、刪除二、NodeJS訪問MongoDB 2.1、安裝MongoDB訪問驅動2.2、添加數據2.3、修改數…

一個好用的瀏覽器暗色瀏覽插件 Dark Reader

轉載于:https://www.cnblogs.com/tyong/p/9973363.html

Android小測驗感受

1.運行出現“...keeps stopping” 因為 前臺變量“無值”而后臺卻進行“獲取變量值” 2.switch(int,char...) case break;(不能忘) 3.轉載于:https://www.cnblogs.com/tangxx1996/p/10825134.html

SpringMVC ?注解式傳遞Ztree參數

前端頁面JS處理&#xff1a; $("#save").click( function(){var zTree $.fn.zTree.getZTreeObj("treeDemo" );if(projectType "" || projectType null || projectType undefined){alert( "請選擇項目類型&#xff01;" ); return…

實驗 4 [bx]和 loop 的使用

實驗結論 實驗1&#xff1a;綜合使用 loop,[bx]&#xff0c;編寫完整匯編程序&#xff0c;實現向內存 b800:07b8 開始的連續 16 個字單元重復填充字數據 0403H。 1.源代碼及實驗結果 運行結果&#xff1a;屏幕中央出現一排紅色的心?。 2.將源代碼程序中字數據 0403H→修改為 0…

linux開發工具之gcc

首先gcc編譯鏈接的一個實例如下所示&#xff1a; 接下來看一下gcc的常見選項&#xff1a; gcc的使用示例&#xff1a; 轉載于:https://www.cnblogs.com/wsw-seu/p/10826124.html

怎么解決eclipse報PermGen space異常的問題

怎么解決eclipse報PermGen space異常的問題 最近使用eclipse做開發&#xff0c;使用的服務器是tomcat&#xff0c;但在啟動時報了Caused by: java.lang.OutOfMemoryError: PermGen space的異常。 這個錯誤很常見&#xff0c;于是配置tomcat下的catalina.bat&#xff0c;配置e…

org.hibernate.service.ServiceRegistryBuilder被棄用

看視頻教程是這樣寫的: //創建配置對象Configuration config new Configuration().configure();//創建服務注冊對象ServiceRegistry serviceRegistry new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();//創建會話工廠對象session…