JS事件

題目1:

DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別厌殉?

  • DOM0級事件處理方式:
    通過JavaScript制定事件處理程序的傳統(tǒng)方式。就是將一個函數(shù)賦值給一個事件處理屬性公罕,第四代web瀏覽器出現(xiàn),至今為所有瀏覽器所支持楼眷。
    var btn = document.getElementById("btn");

    btn.onclick = function(){
      console.log("I am clicked");
    }  // 設置事件

    btn.onclick = null;  // 刪除事件

優(yōu)點: 簡單,兼容性好罐柳。
缺點: 一個事件處理程序只能對應一個處理函數(shù)掌腰,設置第二個事件時候张吉,因為是賦值辅斟,所以第二個事件會覆蓋第一個事件芦拿。

  • DOM2級事件處理方式
    DOM2級事件處理方式指定了,添加事件處理程序和刪除事件處理程序的方法
    addEventListener(eventName,func,isPuhuo);     //添加事件
    removeEventListener(eventName,func,isPuhuo);  //刪除事件
/*參數(shù)分別是蔗崎,事件處理屬性名稱酵幕,處理函數(shù)缓苛,是否在捕獲時執(zhí)行事件處理函數(shù)邓深,
默認是false,即在冒泡階段執(zhí)行
*/

應用舉例

    var btn = document.getElementById("btn");
    var cancel = document.getElementById("cancel")
    function fn(){
      console.log("I am clicked 123");
    }
    btn.addEventListener("click",fn)  //點擊btn事件芥备,執(zhí)行函數(shù)fn
    cancel.addEventListener("click",function(){
      btn.removeEventListener("click",fn)
    })  //點擊cancel事件,執(zhí)行刪除btn的綁定事件

注:
(a) eventName的值均不含on,例如注冊鼠標點擊事件eventName為“click”
(b) 處理函數(shù)中的this依然指的是指當前dom元素
(c) 通過addEventListener添加的事件處理程序萌壳,只能通過removeEventListener來刪除,也就是說通過addEventListener添加的匿名函數(shù)將無法被刪除日月。

題目2:

attachEvent與addEventListener的區(qū)別?

  • 參數(shù)個數(shù)不相同爱咬,這個最直觀,addEventListener有三個參數(shù)精拟,attachEvent只有兩個,attachEvent添加的事件處理程序只能發(fā)生在冒泡階段蜂绎,addEventListener第三個參數(shù)可以決定添加的事件處理程序是在捕獲階段還是冒泡階段處理(我們一般為了瀏覽器兼容性都設置為冒泡階段)

  • 第一個參數(shù)意義不同瘫里,addEventListener第一個參數(shù)是事件類型(比如click荡碾,load),而attachEvent第一個參數(shù)指明的是事件處理函數(shù)名稱(onclick坛吁,onload)

  • 事件處理程序的作用域不相同劳殖,addEventListener的作用域是元素本身拨脉,this是指的觸發(fā)元素,而attachEvent事件處理程序會在全局變量內運行玫膀,this是window矛缨,所以剛才例子才會返回undefined帖旨,而不是元素id

  • 為一個事件添加多個事件處理程序時箕昭,執(zhí)行順序不同解阅,addEventListener添加會按照添加順序執(zhí)行,而attachEvent添加多個事件處理程序時順序無規(guī)律(添加的方法少的時候大多是按添加順序的反順序執(zhí)行的货抄,但是添加的多了就無規(guī)律了)述召,所以添加多個的時候,不依賴執(zhí)行順序的還好积暖,若是依賴于函數(shù)執(zhí)行順序,最好自己處理夺刑,不要指望瀏覽器

題目3:

解釋IE事件冒泡和DOM2事件傳播機制?

  • IE事件冒泡:
    事件從目標元素向父級元素傳遞性誉,直到傳遞到 window ( document) 停止窿吩。
  • DOM2級事件傳播:有3個階段:
  • 捕獲階段:事件從document向子元素一層層傳遞错览,直到目標元素
  • 處于目標階段:此時事件發(fā)生在目標元素上煌往,被看做冒泡的一部分
  • 冒泡階段:和IE冒泡一樣倾哺,從目標元素向父級元素傳遞刽脖,直到document停止羞海。

題目4:

如何阻止事件冒泡曲管? 如何阻止默認事件却邓?

  • 標準瀏覽器
    stopPagation() 阻止事件冒泡
    preventDefault() 阻止默認事件
  • IE瀏覽器
    cancelBubble 設置為true來阻止事件冒泡
    returnValue 設置為false來阻止默認事件

題目5:

有如下代碼院水,要求當點擊每一個元素li時控制臺展示該元素的文本內容。不考慮兼容

  <ul class="ct">
      <li>這里是</li>
      <li>饑人谷</li>
      <li>前端6班</li>
  </ul>
  <script>
      function $(str){
        return document.querySelector(str)
      }
      $(".ct").addEventListener("click",function(e){
        if(e.target.tagName.toLowerCase()==="li"){
          console.log(e.target.innerText);
        }
      })
  </script>

題目6:

補全代碼檬某,要求:

  • 當點擊按鈕開頭添加時在<li>這里是</li>元素前添加一個新元素撬腾,內容為用戶輸入的非空字符串恢恼;當點擊結尾添加時在最后一個 li 元素后添加用戶輸入的非空字符串.
  • 當點擊每一個元素li時控制臺展示該元素的文本內容。
<ul class="ct">
    <li>這里是</li>
    <li>饑人谷</li>
    <li>任務班</li>
</ul>
<input class="ipt-add-content" placeholder="添加內容" />
<button id="btn-add-start">開頭添加</button>
<button id="btn-add-end">結尾添加</button>
<script>
    function $(str) {
        return document.querySelector(str)
    }
    var ul = $(".ct")
    var input = $(".ipt-add-content")
    var btnStart = $("#btn-add-start")
    var btnEnd = $("#btn-add-end")

    ul.addEventListener("click", function(e) {
        if (e.target.tagName.toLowerCase() === "li") {
            console.log(e.target.innerText);
        }
    })

    btnStart.addEventListener("click", function() {
        var newLi = document.createElement("li")
        newLi.innerText = input.value;
        if (newLi.innerText === "") {
            alert("please input content");
        } else {
            ul.insertBefore(newLi, ul.firstChild);
        }
    })

    btnEnd.addEventListener("click", function() {
        var newLi = document.createElement("li")
        newLi.innerText = input.value;
        if (newLi.innerText === "") {
            alert("please input content")
        } else {
            ul.appendChild(newLi, ul);
        }
    })
</script>

題目7:

補全代碼场斑,要求:當鼠標放置在li元素上,會在img-preview里展示當前l(fā)i元素的data-img對應的圖片漏隐。

<body>
    <ul class="ct">
        <li data-img="http://cdn.jirengu.com/book.jirengu.com/img/1.jpg">鼠標放置查看圖片1</li>
        <li data-img="http://cdn.jirengu.com/book.jirengu.com/img/2.jpg">鼠標放置查看圖片2</li>
        <li data-img="http://cdn.jirengu.com/book.jirengu.com/img/3.jpg">鼠標放置查看圖片3</li>
    </ul>
    <div class="img-preview"></div>
    <script>
        function $(str) {
            return document.querySelector(str)
        }

        function $$(str) {
            return document.querySelectorAll(str)
        }

        var ct = $(".ct")
        var li = $$(".ct>li")
        var preview = $(".img-preview")

        ct.addEventListener("mouseover", function(e) {
            if (e.target.tagName.toLowerCase() === "li") {
                var dataImg = e.target.getAttribute("data-img");
                preview.innerHTML = '<img src = \"' + dataImg + '\">'
            }
        })
    </script>
</body>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锁保,隨后出現(xiàn)的幾起案子半沽,更是在濱河造成了極大的恐慌,老刑警劉巖者填,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異占哟,居然都是意外死亡,警方通過查閱死者的電腦和手機榨乎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜜暑,“玉大人,你說我怎么就攤上這事策肝。” “怎么了之众?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棺禾。 經(jīng)常有香客問我,道長膘婶,這世上最難降的妖魔是什么缺前? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任竣付,我火速辦了婚禮诡延,結果婚禮上,老公的妹妹穿的比我還像新娘肆良。我一直安慰自己,他們只是感情好逸绎,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棺牧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颊乘。 梳的紋絲不亂的頭發(fā)上醉锄,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音恳不,去河邊找鬼。 笑死开呐,一個胖子當著我的面吹牛,可吹牛的內容都是我干的筐付。 我是一名探鬼主播卵惦,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓦戚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伤极?” 一聲冷哼從身側響起蛹找,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤哨坪,失蹤者是張志新(化名)和其女友劉穎乍楚,沒想到半個月后当编,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徒溪,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡忿偷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年臊泌,在試婚紗的時候發(fā)現(xiàn)自己被綠了鲤桥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠概。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖播揪,靈堂內的尸體忽然破棺而出贮喧,到底是詐尸還是另有隱情猪狈,我是刑警寧澤箱沦,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布雇庙,位于F島的核電站谓形,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜耸峭,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望匈挖。 院中可真熱鬧康愤,春花似錦儡循、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肴捉。三九已至,卻和暖如春叔收,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饺律。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留复濒,地道東北人脖卖。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓巧颈,卻偏偏與公主長得像畦木,于是被迫代替她去往敵國和親砸泛。 傳聞我的和親對象是個殘疾皇子十籍,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容

  • 1:DOM0事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別晾嘶? 瀏覽器端的JavaScript采用的是事件驅動的異步...
    饑人谷_bigJiao閱讀 280評論 0 0
  • 饑人谷事件課件 1.DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別? DOM0事件有兩種:一是在標簽內寫...
    饑人谷_米彌輪閱讀 262評論 0 0
  • 一垒迂、DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別械姻? DOM0級事件 了解DOM0級事件之前,先了解下H...
    任少鵬閱讀 250評論 0 1
  • 1: DOM0 事件和DOM2級在事件監(jiān)聽使用方式上有什么區(qū)別楷拳? DOM0級事件監(jiān)聽就是把一個方法賦值給一個元素的...
    高進哥哥閱讀 131評論 0 0
  • 簡單理解事件是用戶或瀏覽器自身執(zhí)行的某種動作。諸如click欢揖、load而事件處理程序則是響應某個事件的函數(shù)。諸如o...
    Miss____Du閱讀 820評論 7 6