1. 程式人生 > >從零開始學 Web 之 DOM(六)為元素繫結與解綁事件

從零開始學 Web 之 DOM(六)為元素繫結與解綁事件

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新......
+------------------------------------------------------------
github:https://github.com/Daotin/Web
微信公眾號:Web前端之巔
部落格園:http://www.cnblogs.com/lvonve/
CSDN:https://blog.csdn.net/lvonve/
+-----------------------------------------------------------
在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧!

一、為元素繫結多個事件

前導:如果一個按鈕綁定了多個點選事件,那麼點選按鈕的時候只會執行最後一個點選事件,前面的點選事件都被覆蓋了。那麼如何為一個按鈕繫結多個相同的事件,並且每個事件都會執行呢?

1、為元素繫結多個事件

<body>
    <input type="button" value="按鈕1" id="btn1">
    <input type="button" value="按鈕2" id="btn2">
    <!-- <div id="dv"></div> -->

    <script src="common.js"></script>
    <script>
        // 引數有3個
        // 引數1:事件的型別(事件的名字),不要on
        // 引數2:事件處理函式(命名函式或者匿名函式)
        // 引數3:false

        // 相容性:chrome,firefox支援,IE8不支援
        my$("btn1").addEventListener("click", function() {
            alert("1");
        },false)
        my$("btn1").addEventListener("click", function() {
            alert("2");
        },false)
        my$("btn1").addEventListener("click", function() {
            alert("3");
        },false)

        // 引數有2個
        // 引數1:事件的型別(事件的名字),要on
        // 引數2:事件處理函式(命名函式或者匿名函式)

        // 相容性:chrome,firefox不支援,IE8支援
        my$("btn2").attachEvent("onclick", function() {
            alert("4");
        });
        my$("btn2").attachEvent("onclick", function() {
            alert("5");
        });
        my$("btn2").attachEvent("onclick", function() {
            alert("6");
        });
    </script>
</body>

繫結事件的方式:

addEventListener: chrome,firefox支援,IE8不支援

attachEvent: chrome,firefox不支援,IE8支援

2、繫結事件相容程式碼

<body>
    <input type="button" value="按鈕" id="btn">

    <script src="common.js"></script>
    <script>
        // 為任意元素新增任意事件
        function addAnyEventListener(element, type, func) {
            if(element.addEventListener) {
                element.addEventListener(type, func, false);
            } else if(element.attachEvent) {
                element.attachEvent("on"+type, func);
            } else {
                element["on"+type] = func;
            }
        }

        addAnyEventListener(my$("btn"), "click", function() {
            console.log("事件1");
        });
        addAnyEventListener(my$("btn"), "click", function() {
            console.log("事件2");
        });
        addAnyEventListener(my$("btn"), "click", function() {
            console.log("事件3");
        });
    </script>
</body>

my("dv").onclick == my$("dv")["onclick"]

3、繫結事件的區別

  • 方法名不同;

  • 引數個數不同,addEventListener有三個引數,attachEvent有兩個引數;

  • addEventListener中事件的型別沒有 on,attachEvent中事件的型別有on;

  • chrome,firefox 支援 addEventListener ,IE8不支援;

    chrome,firefox 不支援 attachEvent ,IE8支援;

  • 事件中的 this 不同,addEventListener 中的 this 是當前繫結的物件;

    attachEvent 中的 this 是 window。

二、為元素解綁事件

1、三種方式

1.1、方式一

如果使用 元素.onclick = function(){}; 的方式繫結物件的話,解綁的方式為 元素.onclick = null;

1.2、方式二

如果使用 元素.addEventListener("click", f1, false); 的方式繫結物件的話,解綁方式為 元素.removeEventListener("click", f1, false);

注意:這裡面不能使用匿名函式,因為需要同一個事件處理函式,而兩個匿名函式是兩個不同的函式,所以需要使用命名函式。

1.3、方式三

如果使用 元素.attachEvent("onclick", f1); 的方式繫結物件的話,解綁方式為 元素.detachEvent("onclick", f1);

2、解綁事件相容程式碼

// 為任意元素繫結任意事件
function addAnyEventListener(element, type, func) {
    if(element.addEventListener) {
        element.addEventListener(type, func, false);
    } else if(element.attachEvent) {
        element.attachEvent("on"+type, func);
    } else {
        element["on"+type] = func;
    }
}

// 為任意元素解綁任意事件
function removeAnyEventListener(element, type, funcName) {
    if(element.removeEventListener) {
        element.removeEventListener(type, funcName, false);
    } else if(element.detachEvent) {
        element.detachEvent("on"+type, funcName);
    } else {
        element["on"+type] = null;
    }
}

示例:

<body>
    <input type="button" value="按鈕" id="btn1">
    <input type="button" value="按鈕" id="btn2">

    <script src="common.js"></script>
    <script>
        function f1() {
            console.log("第一個");
        }
        function f2() {
            console.log("第二個");
        }
        addAnyEventListener(my$("btn1"), "click", f1);
        addAnyEventListener(my$("btn1"), "click", f2);

        my$("btn2").onclick = function () {
            removeAnyEventListener(my$("btn1"), "click", f1);
        }
        
    </script>
</body>

相關推薦

開始 Web DOM元素事件

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... +------------------------------------------------------------ github:https://github.com/Daotin/Web 微信公眾號:Web前端之

開始 Web jQuery元素多個相同事件事件

一、為元素繫結多個相同事件 1、方式一 $("#btn").click(function () { console.log("click1"); }).click(function () { console.log("click2"); }).cli

開始 Web jQuery元素定多個相同事件事件

png 好用 添加 方式 執行 存在 區別 也會 地址 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:http://ww

開始 Web DOMDOM的概念,對標簽操作

關註 1.5 pan 什麽 tin p標簽 nod text == 大家好,這裏是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關註。在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,

開始 Web DOM節點

def clas scrip while p標簽 設置 ner 操作 text 大家好,這裏是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關註。在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相

開始 Web DOM對樣式的操作,獲取元素的方式

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 1、對樣式的操作

開始 Web DOMinnerTextinnerHTML、自定義屬性

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 一、相容程式碼 1

開始 Web DOM元素的建立

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... +------------------------------------------------------------ github:https://github.com/Daotin/Web 微信公眾號:Web前端之

開始 Web DOM事件冒泡

>大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... > +------------------------------------------------------------ > github:https://github.com/Dao

開始 Web DOMDOM的概念,對標籤操作

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 一、DOM概念 D

開始 Web AjaxjQuery中的Ajax

var 技術分享 else parse cnblogs 我會 clas alt jquer 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web

開始 Web ES6ES6基礎語法四

實現 fine 開始 isf 原理 mat 系列教程 include number 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

開始 Web CSS3動畫animation,Web字型

大家好,這裡是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 部落格園:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/

開始 Web jQuery操作元素其他屬性,元素事件

一、操作元素的寬和高 1、方法一 元素.css("width"); 元素.css("height"); 最後得到的是字串型別的,比如 200px。 如果我們在設定為原來寬高2倍的時候,就要先把獲取的寬高轉換成數字型別,再乘以2,這樣操作比較麻煩,有沒有簡單的方法呢? 2、方法二 元素.width(屬性

開始 Web BOMoffset,scroll,變速動畫函數

樣式 清理 java mar dde sof mov har width 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:

開始 Web jQuery獲取和操作元素的屬性

eight images idt 隱藏 lis 屬性 ner master lin 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

開始 Web jQuery事件冒泡,事件參數對象,鏈式編程原理

eval uri turn 定位 return 也會 否則 ont sele 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客

開始 Web AjaxAjax 概述,快速上手

lan 技術分享 php 概述 由於 val asc logs 更新 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:ht

開始 Web Ajax同步異步請求,數據格式

遊記 document 空閑 name center 20px 實現 resp 也會 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之

開始 Web HTML5表單,多媒體新增內容,新增獲取操作元素,自定義屬性

器) user 對比 style 按鈕 ont mp3 url -- 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:ht