<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # 事件 &emsp;&emsp;事件是可以被控件識別的操作,如按下確定按鈕,選擇某個單選按鈕或者復選框。每一種控件有自己可以識別的事件,如窗體的加載、單擊、雙擊等事件,編輯框(文本框)的文本改變事件,等等。 &emsp;&emsp;事件是基于 觸發-響應 機制實現的,當用戶對控件做某些**操作**時,如 點擊,移入鼠標,輸入文字等,控件會識別到該操作,并作出對應的**響應**。 ## 事件三要素(掌握) 1. **事件源**: 觸發事件的元素(被動) ? 2. **事件名稱**: click 點擊事件 ? 3. **事件處理函數**: 事件觸發后要執行的代碼(函數形式) ## 事件的基本使用 注冊事件,必須使用**事件三要素**: **1、事件源 ? 2、事件名稱 ? 3、事件處理函數** html和css代碼 ``` <input id="hitme" type="button" value="點我!"/> ``` JavaScript代碼 ``` //1、獲取按鈕對象 var hitme = document.getElementById('hitme'); console.log(hitme); //2、注冊(綁定)點擊事件 hitme.onclick = function () { alert('別點我,疼!') } ``` <br> # **注冊事件的三種方式** &emsp;&emsp;這節課開始,我們來深入學習事件。首先,回顧以前注冊事件的做法,在團隊開發中,當一個按鈕要被多個用戶使用時,多個用戶可能會對一個按鈕進行事件注冊,此時每個用戶都的代碼都寫在了 js 文件中,當引入多個js文件時,后面引入的js會覆蓋掉前面引入的js的對按鈕的操作。即前面引入的js中的注冊事件會被后面引入的js的注冊事件覆蓋掉。 &emsp;&emsp;下面對事件相關的方法進行詳細學習,以解決以上存在的事件覆蓋的問題。 **addEventListener**,將指定的監聽器注冊到 EventTarget(事件目標)上,當該對象觸發指定的事件時,指定的回調函數就會被執行。說白了,就是addEventListener可以將時間監聽器注冊到btn按鈕上,當事件發生時,調用事件處理函數。 1、以前的方式:無法給一個對象注冊多個同種事件 2、addEventListener方式:有瀏覽器兼容性問題 &emsp;&emsp;html和css代碼 ``` <input id="btn" type="button" value="按鈕"/> ``` &emsp;&emsp;JavaScript代碼 ``` var oBtn =document.getElementById('btn'); // 后寫的事件會覆蓋先寫的事件 // 方式一 /*oBtn.onclick=function() { alert('注冊事件1'); //彈出框 }; oBtn.onclick=function() { alert('注冊事件2'); };*/ //方式二 /*oBtn['onclick']=function () { alert('注冊事件01'); }; */ //方式三 oBtn.addEventListener('click',function () { alert('注冊事件001'); },false) //在 addEventListener('click',function () {alert('注冊事件001');},false) 中嗎, // 第一個參數 'click' 是事件類型,不加 on ; //第二個參數 function () {alert('注冊事件001');} 是事件處理函數; //第三個參數 false 是布爾類型,默認值為 false ; true捕獲階段調用事件處理方法;false冒泡階段調用事件處理方法。 ``` ### 注冊事件的兼容性問題 &emsp;&emsp;下面來看,注冊事件的時候,瀏覽器的兼容性問題,我們學習過以下三種種注冊事件存在的問題: 1、以前:無法給同一個對象的同一個事件注冊多個事件處理函數 2、addEventListener:有瀏覽器兼容性問題,是DOM中的標準方法。 3、attachEvent:是IE中特有的方法 &emsp;&emsp;要解決這個問題,我們就得利用自定義函數,自己寫函數去實現。 ??html和css代碼 ``` <button id="btn">按鈕</button> ``` ?JavaScript代碼 ``` var oBtn =document.getElementById('btn'); addEventListener1(oBtn,'click',function () { alert('已處理兼容性問題'); },false); //這里 false 可寫可不寫,默認值是 false ; // 創建一個addEventListener的方法,參數: element--事件源 type--事件類型 fn--執行函數 function addEventListener(element,type,fn){ if(element.addEventListener){ //判斷瀏覽器是否支持 addEventListener ,若符合,則執行下一行代碼。 element.addEventListener(type,fn); }else if (element.attachEvent){ //判斷該瀏覽器是否支持 attachEvent ,若符合,則執行下一行代碼。 element.attachEvent('on'+type,fn); }else{ element['on'+type]=fn; //如果都不支持,就直接使用element['onclick']的方法 } } // attachEvent——兼容:IE7、IE8;不兼容firefox、chrome、IE9、IE10、IE11、safari、opera // addEventListener——兼容:firefox、chrome、IE、safari、opera;不兼容IE7、IE8 ``` &emsp;&emsp;以上方式一般既可以解決這幾個方法的瀏覽器兼容性問題,但是在極端情況下還是有可能存在不支持的瀏覽器,慶幸的是,當前主流瀏覽器都支持了addEventListener,即使是老版本的IE瀏覽器也能用attachEvent解決,最后一種判斷的寫法element\["on"+eventName\] ,是作為一種極端情況下的解決方案。 <br> ## 移除事件的三種方式 &emsp;&emsp;在開發中,如果想讓按鈕的事件處理函數只能執行一次,怎么辦?如何移除元素的事件? &emsp;&emsp;html和css代碼 ``` <button id="btn">按鈕</button> ``` &emsp;&emsp;JavaScript代碼 ``` //如何移除元素的事件? var oBtn = document.getElementById('btn'); ``` ``` // 第一種移除事件的方法 oBtn.onclick = function(){ alert(1111); oBtn.onclick = null; } ``` ``` // 第二種 oBtn.addEventListener('click', fn) function fn(){ alert(111); oBtn.removeEventListener('click', fn); // removeEventListener第二個參數只能接收非匿名函數 } ``` ``` // 第三種,兼容ie9-11 oBtn.attachEvent('onclick', fn); function fn(){ alert(1111); oBtn.detachEvent('onclick', fn); ``` >[info] 小結 > 移除事件的三種方式小結如下: > 1、onclick:讓按鈕的事件處理函數只能執行一次,onclick=null ; > 2、removeEventListener:如果想要移除事件,注冊事件的時候就不能使用匿名函數; > 3、detachEvent:谷歌中不支持,IE9-IE11中支持,了解即可; ### 移除事件的兼容性問題 解決移除事件的兼容性問題 跟 解決注冊事件兼容性問題的函數相似。 注意,我們的代碼知識作為一個演示,在這里作為了解即可,以后會使用使用框架,框架中已經幫我們做了很好的兼容性處理。 ``` var btn = document.getElementById('btn'); addEventListener(btn, 'click', fn); //事件處理函數 function fn() { alert('已經兼容主流瀏覽器的事件移除'); removeEventListener(btn, 'click', fn); } //解決移除事件的瀏覽器兼容性問題 //創建一個removeEventListener方法,用來兼容移除事件 //element 元素, type 事件類型 fn 事件處理函數 function removeEventListener(element, type, fn) { if (element.removeEventListener) { element.removeEventListener(type, fn); }else if (element.detachEvent) { //處理IE6-IE11之前的版本 element.detachEvent('on'+type, fn); }else { // 相當于element.onclick = null element['on'+type]=null; } } ``` ## 事件的三個階段 捕獲階段 目標階段 冒泡階段 下面來學習addEventListener的第三個參數的作用,通過查文檔可以知,addEventListener的第三個參數是一個布爾類型。 1、第三個參數是false時,事件從里到外執行,這種效果叫事件冒泡; 2、第三個參數是true時,事件從外到里執行,執行順序顛倒過來了,這種效果叫做事件捕獲; html和css代碼 ``` <style> #box1 { width: 300px; height: 300px; background-color: blue; } #box2 { width: 200px; height: 200px; background-color: yellow; } #box3 { width: 100px; height: 100px; background-color: red; } </style> <script src="common.js"></script> <div id="box1"> <div id="box2"> <div id="box3"> </div> </div> </div> ``` JavaScript代碼 ``` //addEventListener的第三個參數的作用 var box1 = my$('box1'); var box2 = my$('box2'); var box3 = my$('box3'); var array = [box1, box2, box3]; for (var i = 0; i < array.length; i++) { array[i].addEventListener('click', function () { //輸出事件源的id console.log(this.id); }, true); } //以上代碼,在點擊box3的時候,除了box3本身的事件會觸發,還會觸發box2和box1的事件,而且這種觸發順序是從里到外,這種效果叫做 事件冒泡 for (var i = 0; i < array.length; i++) { array[i].addEventListener('click', function () { //輸出事件源的id console.log(this.id); }, false); } //以上代碼,在點擊box3的時候,除了box3本身的事件會觸發,還會觸發box2和box1的事件,而且這種觸發順序是從外到里,這種效果叫做 事件捕獲 ``` >[info]事件發生的時候,要經過事件的三個階段,我們常常使用的是事件冒泡階段,而其他兩個階段不能人為干預。 在JavaScript中,事件有以下三個階段 第一階段:捕獲階段 第二階段:目標階段(執行當前點擊的元素) 第三階段:冒泡階段 第一階段:捕獲階段 ![](https://img.kancloud.cn/c9/52/c9520a5d38353e44c93840b884bff7ea_452x288.png) 第二階段:目標階段(執行當前點擊的元素) 第三階段:冒泡階段 ![](https://img.kancloud.cn/6b/22/6b22c476e554e66b12178da390f4431f_449x283.png) 注意,注冊事件有三種,其中onclick、attachEvent沒有第三個參數,實際上我們無法通過onclick、attachEvent來干預事件的第一階段和第二階段, 因為onclick、attachEvent都只有兩個參數, 而且onclick、attachEvent注冊的事件默認是冒泡階段。很多時候我們只關心事件的第三階段,即冒泡階段。 //事件的階段 // 第一階段:事件捕獲 // 第二階段:目標階段(執行當前點擊的元素) // 第三階段:事件冒泡 // onclick、attachEvent只有事件冒泡階段 /*for (var i = 0; i < array.length; i++) { array[i].attachEvent('onclick',function () { console.log(this.id); }) }*/ for (var i = 0; i < array.length; i++) { array[i].onclick=function () { console.log(this.id); } } document.body.onclick=function () { console.log(this); } document.onclick=function () { console.log(this); } ### 事件委托(掌握) 案例 選擇美女:當點擊li時,選中li 在事件冒泡中,怎么獲取被點擊的元素?我們可以利用事件冒泡的特點:當子元素的事件發生時,父元素的同名事件也會發生。 利用事件冒泡的特點:當點擊子元素時,父元素的同名事件也會發生。 知識點: 1、事件委托:原理就是事件冒泡。此處的事件委托是,當li被點擊時,li并沒有做事件處理,而是委托ul做了事件處理,ul事件中可以使用事件對象e獲取target屬性,完成事件處理。 2、事件對象(事件處理函數的參數e) html和css代碼 ~~~ <ul id="ul"> ? ?<li>西施</li> ? ?<li>貂蟬</li> ? ?<li>昭君</li> ? ?<li>鳳姐</li> ? ?<li>芙蓉姐姐</li> </ul> ~~~ JavaScript代碼 ~~~ //事件冒泡的應用(事件委托) my$('ul').onclick = function (e) { ? ?//e是事件對象,通過事件對象可以獲取到觸發事件的真正的元素相關的信息 ? ?// console.log(e); ? ?// console.log(this); ? ?//e.target:獲取真正觸發事件的那個元素 ? ?// console.log(e.target); ? ?var target = e.target; ? ?target.style.backgroundColor='lightblue'; } ~~~ **小結** ~~~ 知識點:事件委托,事件對象; 事件處理函數在事件發生時,由系統去調用,系統在調用事件處理函數時,會傳入事件對象,所以我們可以直接使用事件對象。 ? ~~~ ### 事件對象的屬性(掌握) 通過事件對象,我們可以獲取到事件發生的時候,和事件相關的一些數據。事件對象e的IE瀏覽器中存在兼容性問題,可以通過window.event獲取事件對象以解決兼容性問題。下面演示事件對象的屬性的使用和兼容性問題。 事件對象的三個屬性 eventPhase:獲取事件的階段,數值表示 target:真正觸發事件的元素,IE兼容性問題用 e.srcElement currentTarget:相當于this html和css代碼 ~~~ <style> ? ?#box1 { ? ? ? ?width: 300px; ? ? ? ?height: 300px; ? ? ? ?background-color: blue; ? } ? ? ?#box2 { ? ? ? ?width: 200px; ? ? ? ?height: 200px; ? ? ? ?background-color: yellow; ? } ? ? ?#box3 { ? ? ? ?width: 100px; ? ? ? ?height: 100px; ? ? ? ?background-color: red; ? } </style> <script src="common.js"></script> ? <input type="button" id="btn" value="事件按鈕"/> <div id="box1"> ? ?<div id="box2"> ? ? ? ?<div id="box3"> ? ? ? ?</div> ? ?</div> </div> ? ~~~ JavaScript代碼 ~~~ //事件對象的屬性的使用和兼容性問題 var box1 = my$('box1'); var box2 = my$('box2'); var box3 = my$('box3'); var array = [box1, box2, box3]; my$('btn').onclick = function (e) { ? ?//當按鈕被點擊時,事件處理函數被系統調用,系統調用事件處理函數的時候,會傳入事件對象。 ? ?//我們可以通過事件對象獲取到事件的各種信息 ? ?//老版本的IE中,獲取事件對象有兼容性問題 ? ?e = e || window.event; ? ?//獲取事件的階段,數值表示 捕獲階段 1 ? 目標階段 2 冒泡階段 3 ? ?console.log(e.eventPhase); ? ?//獲取真正觸發事件的對象 ? ?// 獲取觸發事件的元素,老版本的IE中,使用srcElement獲取 ? ?var target = e.target || e.srcElement; ? ?console.log(target); ? ?//當前執行事件的元素,相當于this ? ?console.log(e.currentTarget); } ~~~ 事件冒泡中的三個屬性代表的對象不一樣 eventPhase:目標階段、冒泡階段 target:IE兼容性問題用 e.srcElement currentTarget:相當于this ~~~ for (var i = 0; i < array.length; i++) { ? ?array[i].onclick = function (e) { ? ? ? ?e = e || window.event; ? ? ? ?//獲取事件的階段,數值表示 捕獲階段 1 ? 目標階段 2 冒泡階段 3 ? ? ? ?console.log(e.eventPhase); ? ? ? ?//獲取真正觸發事件的對象 ? ? ? ?// 老版本的IE中,使用srcElement獲取 ? ? ? ?var target = e.target || e.srcElement; ? ? ? ?console.log(target); ? ? ? ?//相當于this ? ? ? ?console.log(e.currentTarget); ? ? ? ?console.log(this); ? } } ~~~ event.type:獲取事件名稱。 應用場景:給多個事件指定同一個函數 好處:多個事件只使用了一個函數,減少內存的消耗 html和css代碼 ~~~ <style> ? ?body { ? ? ? ?margin: 0; ? } ? ? ?#box { ? ? ? ?margin: 100px; ? ? ? ?width: 200px; ? ? ? ?height: 200px; ? ? ? ?background-color: blue; ? } </style> <script src="common.js"></script> ? <div id="box"></div> ? ~~~ JavaScript代碼 ~~~ //event.type:獲取事件名稱。 my$('box').onmouseover = function (e) { ? ?e = e || window.event; ? ?console.log(e.type); } ? my$('box').onclick = fn; my$('box').onmouseover = fn; my$('box').onmouseout = fn; ? //當多個(種)事件使用同一個事件處理函數時,可以使用e.type獲取到當前發生的事件的名稱 //多個事件只使用了一個函數,減少內存的消耗 ? function fn(e) { ? ?e = e || window.event; ? ?//根據事件名稱,執行不同的業務代碼 ? ?switch (e.type) { ? ? ? ?case 'click': ? ? ? ? ? ?console.log('click事件'); ? ? ? ? ? ?break; ? ? ? ?case 'mouseover': ? ? ? ? ? ?console.log('鼠標移入'); ? ? ? ? ? ?break; ? ? ? ?case 'mouseout': ? ? ? ? ? ?console.log('鼠標移出'); ? ? ? ? ? ?break; ? } } ? ~~~ 當事件發生時,通過事件對象可以獲取鼠標的位置坐標 ,如下: 1、e.clientX 和 e.clientY,獲取相對于可視區域鼠標位置坐標,所有瀏覽器都支持; ? 2、e.pageX 和 e.pageY,獲取相對于整個文檔的的位置,IE9以后開始支持; HTML和css代碼 ~~~ <style> ? ?body { ? ? ? ?margin: 0; ? ? ? ?height: 1000px; ? } ? </style> ~~~ JavaScript代碼 ~~~ document.onclick=function (e) { ? ?//獲取可視區域內的鼠標的坐標, ? ?// console.log(e.clientX); ? ?// console.log(e.clientY); ? ? ?//獲取相對于整個文檔的的位置。 ? ?console.log(e.pageX); ? ?console.log(e.pageY); ? } ~~~ ~~~ 1、當事件發生時,通過事件對象可以獲取鼠標相對于可視區域的位置坐標 e.clientX 和 e.clientY ? ? ,所有瀏覽器都支持,窗口位置;設置滾動條進行演示。 2、當事件發生時,通過事件對象可以獲取鼠標相對于整個文檔的的位置坐標 e.pageX 和 e.pageY ~~~ #### 需求 1、跟著鼠標飛的天使:當鼠在瀏覽器頁面移動時,讓天使(一張圖片)跟著鼠標移動。 需求分析:當鼠標在文檔中移動時,讓圖片的坐標跟著鼠標的坐標的變化而變化,即鼠標的位置和圖片的位置保持相對靜止。 html和css代碼 ~~~ <style> ? ?body { ? ? ? ?height: 1000px; ? } ? ?#ts { ? ? ? ?position: absolute; ? } </style> <script src="common.js"></script> ? <img src="images/tianshi.gif" id="ts" alt=""> ? ~~~ JavaScript代碼 ~~~ //1、鼠標移動事件 document.onmousemove=function (e) { ? ?// console.log(e.clientX, e.clientY); ? ?//在可視區域內移動 ? ?// my$('ts').style.left = e.clientX + 'px'; ? ?// my$('ts').style.top = e.clientY+ 'px'; ? ?//在整個文檔中移動 ? ?my$('ts').style.left = e.pageX - 20 + 'px'; ? ?my$('ts').style.top = e.pageY - 20 + 'px'; } ~~~ 2、獲取鼠標在文檔中距離頂部的距離 (1)e.clientX 和 e.clientY,獲取相對于可視區域鼠標位置坐標,所有瀏覽器都支持; ? (2)e.pageX 和 e.pageY,獲取相對于整個文檔的的位置,IE9以后開始支持; 解決pageX和pageY的兼容性問題,思路:pageY = clientY+頁面滾動出去的距離; 獲取頁面滾動出去的距離,document.body是文檔的body元素: document.body.scrollLeft document.body.scrollTop 有些瀏覽器是使用document.documentElement(文檔根元素 html)獲取滾動出去的距離: document.documentElement.scrollLeft document.documentElement.scrollTop 為了解決瀏覽器兼容性問題,我們需要使用到document.body和document.documentElement兩種對象。 html和css代碼 ~~~ <style> ? ?body { ? ? ? ?height: 1000px; ? } ? ? ?#ts { ? ? ? ?position: absolute; ? } </style> ~~~ JavaScript代碼 ~~~ //獲取頁面滾出去的距離 // 需求:獲取鼠標在文檔中距離頂部的距離 // ? 思路:鼠標距離文檔頂部的距離 = clientY + 頁面被滾動處理的長度 document.onclick=function (e) { ? ?//處理事件對象的兼容性問題 ? ?e = e || window.event; ? ? ?//獲取被滾動出去的頁面的長度 ? ?console.log(document.body.scrollLeft); ? ?console.log(document.body.scrollTop); ? ? ?//文檔元素 html元素 ? ?console.log(document.documentElement); ? ?console.log(document.documentElement.scrollLeft); ? ?console.log(document.documentElement.scrollTop); } ? //獲取頁面滾出去的距離 function getScroll(){ ? ?var scrolLeft = document.body.scrollLeft || document.documentElement.scrollLeft; ? ?var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; ? ? ?return{ ? ? ? ?scrolLeft:scrolLeft, ? ? ? ?scrollTop:scrolLeft ? } } ? ~~~ 解決pageX和pageY的兼容性問題,e.pageX || e.clientX+getscroll().scrollLeft ~~~ // 需求:獲取鼠標在文檔中距離頂部的距離 // ? 思路:鼠標距離文檔頂部的距離 = clientY + 頁面被滾動處理的長度 document.onclick = function (e) { ? ?console.log(getPage(e).pageX, getPage(e).pageY); } ? // 鼠標距離文檔頂部的距離 = clientY + 頁面被滾動處理的長度 function getPage(e) { ? ?var pageX = e.pageX || e.clientX + getScroll().scrolLeft; ? ?var pageY = e.pageY || e.clientY + getScroll().scrollTop; ? ?return{ ? ? ? ?pageX:pageX, ? ? ? ?pageY:pageY ? } } // 注意: IE中document.onclick事件無效, 需使用document.body.onclick進行測試 ~~~ 需求:獲取鼠標在div中的坐標; 需求分析:鼠標在div中的位置 = 鼠標在文檔中的坐標 - div在文檔中的坐標(偏移量); div的偏移量:offsetLeft、offsetTop; html和css代碼 ~~~ <style> ? ?body { ? ? ? ?margin: 0; ? } ? ? ?#box { ? ? ? ?width: 300px; ? ? ? ?height: 300px; ? ? ? ?border: 1px solid red; ? ? ? ?margin: 103px 10px 10px 103px; ? } </style> <div id="box"> ? </div> ~~~ JavaScript代碼 ~~~ my$('box').onclick=function (e) { ? ?console.log(getPage(e).pageX); ? ?console.log(getPage(e).pageY); ? ?//元素在文檔中的坐標(偏移量) ? ?console.log(this.offsetLeft); ? ?console.log(this.offsetTop); ? ?//獲取鼠標在div中的坐標 ? ?var divLeft = getPage(e).pageX - this.offsetLeft; ? ?var divTop = getPage(e).pageY - this.offsetTop; ? ?console.log(divLeft, divTop); } ~~~ ### 阻止事件傳播(掌握) 事件傳播的經典行為是事件冒泡,下面介紹如何阻止事件冒泡。 我們曾使用return false取消a標簽的默認跳轉行為,除了這種寫法,DOM中也提供了阻止a標簽默認行為的標準方法 e.preventDefault(),而在IE老版本中則使用 e.returnValue = false; html和css代碼 ~~~ <a id="link" href="http://www.baidu.com">我尋你千百度</a> ? <style> ? ?#box1 { ? ? ? ?width: 300px; ? ? ? ?height: 300px; ? ? ? ?background-color: blue; ? } ? ? ?#box2 { ? ? ? ?width: 200px; ? ? ? ?height: 200px; ? ? ? ?background-color: yellow; ? } ? ? ?#box3 { ? ? ? ?width: 100px; ? ? ? ?height: 100px; ? ? ? ?background-color: green; ? } </style> <script src="common.js"></script> ? <div id="box1"> ? ?<div id="box2"> ? ? ? ?<div id="box3"> ? ? ? ?</div> ? ?</div> </div> ? ? ~~~ JavaScript代碼 ~~~ my$('link').onclick = function (e) { ? ?alert('跳轉吧'); ? ?// return false; ? ?//DOM中的標準方法 ? ?// e.preventDefault(); ? ?//IE的老版本中使用e.returnValue ? ?e.returnValue = true; } ? ~~~ 停止事件傳播->阻止事件冒泡: 標準方法 event.stopPropagation(); IE低版本 event.cancelBubble = true; 標準中已廢棄 ~~~ for (var i = 0; i < array.length; i++) { ? ?array[i].onclick = function (e) { ? ? ? ?console.log(this.id); ? ? ? ?//阻止冒泡 ? ? ? ?// Propagation:傳播 ? ? ? ?// - 標準方式 event.stopPropagation(); ? ? ? ?// e.stopPropagation(); ? ? ? ?// - IE低版本 event.cancelBubble = true; 標準中已廢棄 ? ? ? ?e.cancelBubble = true; ? } } ~~~ ### 常用的鼠標和鍵盤事件(掌握) 需求: 控制輸入年齡的文本框,使其只能輸入數字和刪除輸入的數字 。 在開發中,經常會看到這樣的需求 “ 控制輸入年齡的文本框,使其只能輸入數字和刪除輸入的數字 ” 。用戶在輸入數字時,需要按下鍵盤進行輸入,怎么知道鍵盤是否按下呢?要完成這種需求,我們需要學習鍵盤事件! onkeyup事件:鍵盤按鍵抬起觸發 ; ? onkeydown事件:鍵盤按鍵按下觸發; 鍵盤碼 e.keyCode的值在 48-57 之間對應著鍵盤上的數字,回退(刪除)按鍵的鍵盤碼是 8,取消鍵盤按下時的默認行為(所謂默認行為是指:按鍵的值落到文本框內)。 html和css代碼 ~~~ 年齡:<input type="text" name="userAge" id="tx"/> ~~~ JavaScript代碼 ~~~ my$('tx').onkeydown = function (e) { ? ?//處理事件對象的瀏覽器兼容性問題 ? ?e = e || window.event; ? ?// e.keyCode: 鍵盤碼, 在[48, 57]區間內的鍵盤碼,對應著十個數值 ? ?// console.log(e.keyCode); ? ?if ((e.keyCode < 48 || e.keyCode > 57) && e.keyCode !== 8) { ? ? ? ?//取消鍵盤輸出的默認行為的執行, 按鍵的值將不落到文本框中 ? ? ? ?// return false; ? ? ? ?e.preventDefault(); ? } } ? ? ~~~ **小結** ~~~ 通過前面的學習,我們學習了一下這些事件,小結如下。 ? onkeyup事件:鍵盤按鍵抬起觸發 ; onkeydown事件:鍵盤按鍵按下觸發; ? onclick事件:元素被點擊時觸發; onmouseup事件:鼠標按鍵放開時觸發; onmousedown事件:鼠標按鍵按下觸發; onmousemove事件:鼠標移動觸發; ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看