最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 事件處理示例分享

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

廢話少說(shuō),直接奉上示例代碼:

復(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();
            }
        }
        //取得事件源對(duì)象
        var getEvent1 = function (e) {
            e = e || window.event;
            var obj = e.srcElement ? e.srcElement : e.target;
            return obj;
        }
        //取得事件源對(duì)象
        var getEvent2 = function (e) {
            if (window.event) return window.event;
            var c = getEvent2.caller;
            while (c.caller) {
                c = c.caller;
            }
            return c.arguments[0];
        }
        //或者這個(gè)功能更強(qiáng)大
        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事件處理分為三個(gè)階段:捕獲 - 處理 - 起泡。

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

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

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

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

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

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

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

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

相關(guān)文章

  • 深入探討javascript函數(shù)式編程

    深入探討javascript函數(shù)式編程

    在函數(shù)式編程中,函數(shù)被看做是“一等公民”。JavaScript可以通過(guò)巧妙地函數(shù)組合來(lái)構(gòu)建抽象,通過(guò)內(nèi)嵌函數(shù)的方式,在軟件開(kāi)發(fā)的過(guò)程中,我們可以把更多的精力放在“函數(shù)要做什么”上,而不用太關(guān)心“函數(shù)如何做”的問(wèn)題。
    2015-10-10
  • JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼

    JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼

    這篇文章主要介紹了JavaScript省市聯(lián)動(dòng)實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-02-02
  • javascript中setTimeout使用指南

    javascript中setTimeout使用指南

    本文給大家通過(guò)3個(gè)方法向大家展示了javascript中的setTimeout的使用,非常的簡(jiǎn)單,有需要的小伙伴可以參考下。
    2015-07-07
  • axios實(shí)現(xiàn)簡(jiǎn)單文件上傳功能

    axios實(shí)現(xiàn)簡(jiǎn)單文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了axios實(shí)現(xiàn)簡(jiǎn)單文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JavaScript語(yǔ)句可以不以;結(jié)尾的煩惱

    JavaScript語(yǔ)句可以不以;結(jié)尾的煩惱

    JavaScript語(yǔ)句可以不以;結(jié)尾的煩惱...
    2007-03-03
  • 微信小程序開(kāi)發(fā)之獲取用戶手機(jī)號(hào)碼(php接口解密)

    微信小程序開(kāi)發(fā)之獲取用戶手機(jī)號(hào)碼(php接口解密)

    這篇文章主要介紹了微信小程序開(kāi)發(fā)之獲取用戶手機(jī)號(hào)碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 微信小程序自定義modal彈窗組件的方法詳解

    微信小程序自定義modal彈窗組件的方法詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序自定義modal彈窗組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • JavaScript前端實(shí)現(xiàn)GIF圖片循環(huán)播放

    JavaScript前端實(shí)現(xiàn)GIF圖片循環(huán)播放

    使用 img 加載 GIF 圖片,內(nèi)容只會(huì)播放一次,之后就會(huì)自動(dòng)暫停,所以這篇文章為大家介紹了如何使用JavaScript實(shí)現(xiàn)GIF圖片循環(huán)播放吧
    2025-03-03
  • js中獲取事件對(duì)象的方法小結(jié)

    js中獲取事件對(duì)象的方法小結(jié)

    事件對(duì)象 的獲取很簡(jiǎn)單,很久前我們就知道IE中事件對(duì)象是作為全局對(duì)象( window.event )存在的,F(xiàn)irefox中則是做為句柄( handler )的第一個(gè)參數(shù)傳入內(nèi)的。所以一行代碼就可以搞定
    2011-03-03
  • js實(shí)現(xiàn)跨域的方法實(shí)例詳解

    js實(shí)現(xiàn)跨域的方法實(shí)例詳解

    這篇文章主要介紹了js實(shí)現(xiàn)跨域的方法,實(shí)例分析了幾種常用的javascript實(shí)現(xiàn)跨域的技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論

商丘市| 彭州市| 会宁县| 东安县| 南投市| 德令哈市| 靖宇县| 阿克陶县| 上饶县| 乡城县| 张掖市| 连云港市| 陆川县| 漠河县| 建德市| 舞阳县| 广宗县| 资源县| 合作市| 凤阳县| 阿荣旗| 格尔木市| 晴隆县| 社旗县| 敦化市| 根河市| 仁怀市| 霍邱县| 抚顺市| 昌都县| 武宣县| 辰溪县| 阿拉善左旗| 扶沟县| 资源县| 集安市| 惠州市| 宜阳县| 鱼台县| 綦江县| 元朗区|