亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

javascript 事件處理示例分享

 更新時間:2014年12月31日 09:30:37   投稿:hebedich  
這篇文章主要介紹了javascript 事件處理示例分享,需要的朋友可以參考下

廢話少說,直接奉上示例代碼:

復(fù)制代碼 代碼如下:

<script type="text/javascript">
    function EventUtil() {
        var _self = this;
        ///添加事件
        var addEvent = (function () {
            if (document.addEventListener) {
                return function (el, type, fn) {
                    el.addEventListener(type, fn, false);
                }
            } else {
                return function (el, type, fn) {
                    el.attachEvent("on" + type, function () {
                        return fn.call(el, window.event);
                    });
                }
            }
        })();
        ///添加屬性改變事件
        var addPropertyChangeEvent = function (obj, fn) {
            if (window.ActiveXObject) {
                obj.onpropertychange = fn;
            } else {
                obj.addEventListener("input", fn, false);
            }
        }
        //移除事件
        var removeEvent = function (obj, type, fn) {
            if (obj.removeEventListener) {
                obj.removeEventListener(type, fn, false);
            } else if (obj.detachEvent) {
                obj.detachEvent("on" + type, obj["on" + type + fn]);
                obj["on" + type + fn] = null;
            }
        }
        //加載事件
        var loadEvent = function (fn) {
            var oldonload = window.onload;
            if (typeof oldonload != "function") {
                window.onload = fn;
            } else {
                window.onload = function () {
                    oldonload();
                    fn();
                }
            }
        }
        //阻止事件
        var stopEvent = function (e) {
            e = e || window.event;
            if (e.preventDefault) {
                e.preventDefault();
                e.stopPropagation();
            } else {
                e.returnValue = false;
                e.cancelBubble = true;
            }
        }
        //如果僅僅是阻止事件冒泡
        var stopPropagation = function (e) {
            e = e || window.event;
            if (!+"\v1") {
                e.cancelBubble = true;
            } else {
                e.stopPropagation();
            }
        }
        //取得事件源對象
        var getEvent1 = function (e) {
            e = e || window.event;
            var obj = e.srcElement ? e.srcElement : e.target;
            return obj;
        }
        //取得事件源對象
        var getEvent2 = function (e) {
            if (window.event) return window.event;
            var c = getEvent2.caller;
            while (c.caller) {
                c = c.caller;
            }
            return c.arguments[0];
        }
        //或者這個功能更強大
        var getEvent3 = function (e) {
            var e = e || window.event;
            if (!e) {
                var c = this.getEvent3.caller;
                while (c) {
                    e = c.arguments[0];
                    if (e && (Event == e.constructor || MouseEvent == e.constructor)) {
                        break;
                    }
                    c = c.caller;
                }
            }
            var target = e.srcElement ? e.srcElement : e.target,
                    currentN = target.nodeName.toLowerCase(),
                    parentN = target.parentNode.nodeName.toLowerCase(),
                    grandN = target.parentNode.parentNode.nodeName.toLowerCase();
            return [e, target, currentN, parentN, grandN];
        }

        _self.addEvent = addEvent;
        _self.addPropertyChangeEvent = addPropertyChangeEvent;
        _self.removeEvent = removeEvent;
        _self.loadEvent = loadEvent;
        _self.stopEvent = stopEvent;
        _self.stopPropagation = stopPropagation;
        _self.getEvent1 = getEvent1;
        _self.getEvent2 = getEvent2;
        _self.getEvent3 = getEvent3;
    }
    var eventUtil = new EventUtil();
    eventUtil.loadEvent(function () {
        eventUtil.addEvent(document, "click", function (e) {
            alert(eventUtil.getEvent3(e));
        });
        eventUtil.addPropertyChangeEvent(document,function(e){
            alert(eventUtil.getEvent3(e));
        });
    });
</script>

javascript事件處理分為三個階段:捕獲 - 處理 - 起泡。

以點擊按鈕為例:
捕獲階段:由外層到內(nèi)層,首先調(diào)用給Window注冊的click捕獲階段監(jiān)聽方法,然后document、body、一層層的父節(jié)點,一直到按鈕本身。

處理階段:調(diào)用按鈕本身的click監(jiān)聽方法。

起泡階段:從按鈕開始,從內(nèi)層到外層,依次調(diào)用各級父節(jié)點的起泡階段監(jiān)聽方法,直到Window。

但是,對于IE8及更低版本IE,不支持捕獲階段,因此捕獲階段的事件監(jiān)聽目前尚不通用。

通常的事件處理方法形式為:

復(fù)制代碼 代碼如下:

function eventHandler(e) { 
    e = e || window.event; 
    var target = e.target || e.srcElement; 
    ... ... 
     

e為事件對象,當事件觸發(fā)時,作為參數(shù)傳進來,但對于IE8及更低版本IE不適用,只能通過全局的event變量訪問,好在不會出現(xiàn)同時處理兩個事件的情況。

相關(guān)文章

  • javascript實現(xiàn)簡單的貪吃蛇游戲

    javascript實現(xiàn)簡單的貪吃蛇游戲

    本文很簡單,給大家分享了一段使用javascript實現(xiàn)簡單的貪吃蛇游戲的代碼,算是對自己學(xué)習(xí)javascript的一次小小的總結(jié),代碼參考了網(wǎng)友的部分內(nèi)容,推薦給大家,希望對大家能夠有所幫助。
    2015-03-03
  • 基于Layui自定義模塊的使用方法詳解

    基于Layui自定義模塊的使用方法詳解

    今天小編就為大家分享一篇基于Layui自定義模塊的使用方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js使用visibilitychange處理頁面關(guān)閉事件

    js使用visibilitychange處理頁面關(guān)閉事件

    本文主要介紹了js使用visibilitychange處理頁面關(guān)閉事件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Bootstrap每天必學(xué)之模態(tài)框(Modal)插件

    Bootstrap每天必學(xué)之模態(tài)框(Modal)插件

    Bootstrap每天必學(xué)之模態(tài)框(Modal)插件,模態(tài)框(Modal)是覆蓋在父窗體上的子窗體。通常,目的是顯示來自一個單獨的源的內(nèi)容,可以在不離開父窗體的情況下有一些互動。子窗體可提供信息、交互等,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 微信小程序?qū)崿F(xiàn)圖片上傳放大預(yù)覽刪除代碼

    微信小程序?qū)崿F(xiàn)圖片上傳放大預(yù)覽刪除代碼

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)圖片上傳放大預(yù)覽刪除代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • javascript 快速排序函數(shù)代碼

    javascript 快速排序函數(shù)代碼

    主要原理是快速排序的原理:找基準點、建立二個數(shù)組分別存儲、遞歸
    2012-05-05
  • 使用透明效果來自定義文件上傳按鈕控件樣式

    使用透明效果來自定義文件上傳按鈕控件樣式

    處于安全上的考慮,input[type="file"] 的文件選擇按鈕樣式并不能隨意修改(不過可以修改input 的透明度),可能會跟設(shè)計師的設(shè)計格格不入,這時可以使用透明效果來自定義上傳按鈕
    2012-12-12
  • javascript實現(xiàn)完美拖拽效果

    javascript實現(xiàn)完美拖拽效果

    javascript實現(xiàn)的拖拽效果,可以把屏幕上的圖片拖動到任意地方,效果平滑,點擊圖片還可以從側(cè)邊展開圖片的詳細信息,非常好的相冊效果
    2015-05-05
  • bootstrap datepicker 與bootstrapValidator同時使用時選擇日期后無法正常觸發(fā)校驗的解決思路

    bootstrap datepicker 與bootstrapValidator同時使用時選擇日期后無法正常觸發(fā)校驗的解

    這篇文章主要介紹了bootstrap datepicker 與bootstrapValidator同時使用時選擇日期后無法正常觸發(fā)校驗的解決思路的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • javascript數(shù)組去重3種方法的性能測試與比較

    javascript數(shù)組去重3種方法的性能測試與比較

    面試題中有一題數(shù)組去重,首先想到的是對象存鍵值的方法可是遇到不同類型又能轉(zhuǎn)換成同樣的字符串的就完了接下來為大家介紹下雙重循環(huán)/存鍵值和類型實現(xiàn)去重,感興趣的各位可以參考下哈
    2013-03-03

最新評論