詳解javascript事件綁定使用方法

来源:http://www.cnblogs.com/good10000/archive/2016/10/31/6017136.html
-Advertisement-
Play Games

由於html是從上至下載入的,通常我們如果在head部分引入javascript文件,那麼我們都會在javascript的開頭添加window.onload事件,防止在文檔問載入完成時進行DOM操作所出現的錯誤。如果有多個javascript文件,那麼極有可能出現多個window.onload事件, ...


由於html是從上至下載入的,通常我們如果在head部分引入javascript文件,那麼我們都會在javascript的開頭添加window.onload事件,防止在文檔問載入完成時進行DOM操作所出現的錯誤。如果有多個javascript文件,那麼極有可能出現多個window.onload事件,但是最後起作用的只有一個,這時候就需要使用事件綁定來解決這個問題了。

IE方式
attachEvent(事件名稱, 函數),綁定事件處理函數
detachEvent(事件名稱, 函數),解除綁定

DOM方式
addEventListener(事件名稱,函數, 捕獲)
removeEventListener(事件名稱, 函數, 捕獲)

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
<script>
window.onload=function ()
{
  var oBtn=document.getElementById('btn1'); 
  oBtn.onclick=function ()
  {
    alert('a');
  };
    
  oBtn.onclick=function ()
  {
    alert('b');
  };
};
</script>
</head>
<body>
<input id="btn1" type="button" value="按鈕" /> 
</body>
</html>

  

這段js代碼,運行結果是彈出b,因為有兩個oBtn的點擊事件,但是只執行了最後一個,這時候就體現出事件綁定的重要性了。

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
<script>
window.onload=function ()
{
  var oBtn=document.getElementById('btn1');
  //IE瀏覽器
  if(oBtn.attachEvent)
  {
    oBtn.attachEvent('onclick', function ()
    {
      alert('a');
    });
    oBtn.attachEvent('onclick', function ()
    {
      alert('b');
    });
  }
  //其他瀏覽器
  else
  {
    oBtn.addEventListener('click', function () 
    {
      alert('a');
    }, false);
    oBtn.addEventListener('click', function () 
    {
      alert('b');
    }, false);
  }
    
};
</script>
</head>
<body>
<input id="btn1" type="button" value="按鈕" />
</body>
</html>

  

當你使用事件綁定的時候,那麼兩次點擊事件都會執行,只是執行順序在不同瀏覽器是不同的。在IE中是自下而上執行,而在其他瀏覽器中是自上而下,不過由於alert的特殊性我們可以看出差別,其他語句基本等同於沒有差別,但是在對於一些對時間要求嚴格是事件的使用時還是需要註意的,比如之前有一篇文章圖片輪播中的setInterval對時間的細微的差別最後導致滾動混亂。 基於原生javascript的圖片輪播domo

最後將我們的代碼整理成函數,便於之後的使用

function myAddEvent(obj, ev, fn)
{
  if(obj.attachEvent)
  {
    obj.attachEvent('on'+ev, fn);
  }
  else
  {
    obj.addEventListener(ev, fn, false); 
  }
}

  


這時候如果需要使用多個window.onload事件其實就和使用多個oBtn.onclick事件差不多了。如下調用函數即可。

myAddEvent(window,'load',function () 
{
  alert('a');
});
myAddEvent(window,'load',function () 
{
  alert('b');

  



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 線上預覽 插件說明 - jbox 是一款基於 jQuery 的多功能對話框插件,能夠實現網站的整體風格效果,給用戶一個新的視覺享受。 運行環境 - 相容 IE6+、Firefox、Chrome、Safari、Opera 等主流瀏覽器。備註:IE不支持邊框的圓角樣式,不推薦大家使用蛋痛的IE瀏覽器。 ...
  • 本篇為完結篇。主要講述如何造出輪子的高級特性。 一. css方法的高級操作 先看本文第一部分所講的dQuery css方法 javascript //css方法 dQuery.prototype.css=function(attr,value){ if(arguments.length==2){// ...
  • CSS
    引入 <link rel=”stylesheet” type=”text/css” href="style.css"/> <style type="text/css">@import "style.css"</style>文字屬性 屬性名稱 屬性值 說明font-style normal 正常顯示 ...
  • /*ajax對象的成員常用屬性:responseText:以字元串形式接收伺服器端返回的信息responseXML:以Xml Document對象形式接收伺服器返回的信息readyState:返回當前請求的狀態0:剛創建ajax對象1:已經調用open方法2:已經調用send方法3:已經返回部分數據 ...
  • 這篇文章是對於編程小白新手來說的,對於已經在編程路上蹦躂的菜鳥,老鳥,大牛,請忽略~~哈哈! 1.打字速度是必備的素養! a) 打字速度是必備的素養! b) 可以使用市面上常見的打字練習工具,比如金山打字通等.不要練習中文打字,只練習英文打字就行了。英文文章一定要練習到每分鐘100字母以上。 2.認 ...
  • checkbox多選 技術一般水平有限,有什麼錯的地方,望大家指正。 全選,多選都是為了使用的方便,一般情況下全選就夠用了,但是用戶要求實現一個多選的功能也沒有辦法老老實實的做吧。 多選的實現也較為簡單,首先需要一個遮罩可以標識給用戶當前所選擇的區域,其次就是選中用戶所需要的信息,按照這個思路我們來 ...
  • 在Vue.js中,每一個vue文件都是一個組件,在.vue文件中可以將模板,腳本,樣式寫在一起,便於組織整個組件。在使用template,script時,編寫css樣式時,都進行的特別順利,唯獨當我想用sass來預處理css時,在style下使用lang='sass'一直報錯。 在.vue中是這樣的 ...
  • 本文實例為大家講解了jQuery $.ajax()方法參數,供大家參考,具體內容如下 $.ajax({ url:'test.do', data:{id:123,name:'xiaoming'}, type:'post', dataType:'json', success:function(data) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...