js原生事件綁定

關于事件綁定的面試題和實際運用

如何編寫一個通用的原生事件監(jiān)聽函數(shù)?

 // 簡單封裝一個通用事件綁定

    function bindEvent(elem,type,fn){
        elem.addEventListener(type,fn);
    }

    var a = document.getElementById('link1');

    bindEvent(a,'click',function(e){
        e.preventDefault();  // 阻止標簽默認行為
        alert('click')
    });

// 關于低版本時間兼容
    // 使用attachEvent綁定事件

關于低版本的瀏覽器我們只需要了解就好了,如果你在面試中如果要求要對很低版本的瀏覽器做兼容的話,建議你還是換一個機會去面,處理低版本瀏覽器的兼容是浪費生命的一件事情。

使用事件冒泡實現(xiàn)代理事件綁定?

在實際工作運用中,比如這么一個場景:我們要對一頁的多個圖片項做事件綁定,如果我們一個個對圖片綁定是一件很麻煩的事情,而且還有對重新加載的圖片做重新的綁定這是個很麻煩的時候。所以我們使用事件冒泡實現(xiàn)代理綁定事件就完美解決了這些問題.。

這里我們使用綁定父元素的點擊事件,然后使用子元素的冒泡事件觸發(fā)點擊,然后通過e.target(事件目標對象)判斷觸發(fā)事件元素的那個。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>dom事件</title>
</head>
<body>
    <a href="#" id='link1'>事件綁定</a>
    <div id="div1">
        <a href="#" id="a1">1</a>
        <a href="#" id="a2">2</a>
        <a href="#" id="a3">3</a>
        <!-- 一會隨時新增更多的a便簽 -->
    </div>
 <script>
var div1 = document.getElementById('div1');

    div1.addEventListener('click',function(e){
        e.preventDefault();
        var target = e.target;
        if(target.nodeName === 'A'){
            alert(target.innerHTML);
        }
    })


    </script>
</body>
</html>

所以我們現(xiàn)在重新封裝通用事件的件兼容函數(shù)


    // elem:元素  type:事件類型  selector:目標元素節(jié)點的名稱  fn:事件觸發(fā)方法
    function bindEvent(elem,type,selector,fn){
        if(fn==null){
            fn = selector
            selector = null
        }

        elem.addEventListener(type,function(e){
            var target;
            if(selector){
                target = e.target
                // matches  target是
                if(target.matches(selector)){
                    fn.call(target,e)
                }
            }else{
                fn(e)
            }
        })
    }

    bindEvent(div1,'click','a',function(e){
        alert(e.target.innerHTML)
    })
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,612評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,146評論 25 708
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,165評論 1 92
  • 悲憤的賈老師既盼著妹妹快點反饋回來真實的消息又怕聽到這個消息。怨,讓她悲悲切切,恨,讓她銀牙咬碎。去搗毀這對狗男女...
    樵砥閱讀 343評論 2 3
  • superhero_0615閱讀 182評論 0 0

友情鏈接更多精彩內(nèi)容