JavaScript-事件

事件

事件的綁定方式

1.事件可以在行內(nèi)綁定

<button onclick="alert(123)">按鈕1</button>
<button onclick="fn()">按鈕2</button>
<script>
    function fn(){
        alert(456)
    }
</script>

2.用on加事件名來綁定徘禁,但是缺點(diǎn)是不能重復(fù)綁定疾渴,否則后面的綁定事件會覆蓋前面的

<body>
<button id="btn">按鈕</button>
</body>
<script>
btn.onclick=function(){
    console.log("第一次單擊");
}
btn.onclick=function(){
    console.log("第二次單擊");
}
</script>

3.利用事件偵聽器綁定事件addEventListener(type,handle,false);

  1. type參數(shù)是用寫需要綁定的事件類型
  2. handle參數(shù)用來處理事件函數(shù)
  3. 是否在捕獲階段執(zhí)行千贯,true是在捕獲階段執(zhí)行,false則是在冒泡階段執(zhí)行

用這種方法綁定事件可以對同一對象重復(fù)綁定:

<body>
<button id="btn">按鈕</button>
</body>
<script>
document.getElementById("btn").addEventListener("click",handle,false);
function handle(){
    console.log("第一次點(diǎn)擊");
}
document.getElementById("btn").addEventListener("click",handle1,false);
function handle1(){
    console.log("第二次點(diǎn)擊");
}
</script>

4.低版本的IE中用attachEvent()來代替搞坝,特點(diǎn)是順序注冊事件搔谴,執(zhí)行時是倒敘執(zhí)行。

事件對象

瀏覽器為事件提供的一個對象桩撮,用來記錄各種具體的信息敦第。

btn.onclick = function(){
    console.log(window.event);
}

另一種寫法:

btn.onclick=function(e){
    console.log(e);
}

阻止事件冒泡

事件對象中有一個方法來阻止事件冒泡,這個方法是:stopPropagation

<body>
<style>
    #big{
        width: 200px;
        height: 200px;
        border:1px solid #000;
    }
    #middle{
        width: 150px;
        height: 150px;
        background: #abcdef;
    }
    #small{
        width: 100px;
        height: 100px;
        background: red;
    }
</style>
<div id="big">
    大盒子的內(nèi)容
    <div id="middle">
        中盒子的內(nèi)容
        <div id="small">
            小盒子的內(nèi)容
        </div>
    </div>
</div>
</body>
<script type="text/javascript">
big.onclick=function(){
    console.log(this.innerText);
    console.log("大盒子的內(nèi)容完畢");
}
middle.onclick=function(){
    console.log(this.innerText);
    console.log("中盒子的內(nèi)容完畢");
}
small.onclick=function(e){
    var ev = e || window.event;
    ev.stopPropagation();
    console.log(this.innerText);
    console.log("小盒子的內(nèi)容完畢");
}
</script>

也有另一種寫法:

ev.cancelBubble=true; # IE低版本瀏覽器

事件類型

e.type //事件類型

鼠標(biāo)按鍵信息

e.button //鼠標(biāo)按鍵信息

它有三個返回值:

  1. 在事件中點(diǎn)擊鼠標(biāo)左鍵店量,則它的返回值是 0
  2. 在事件中點(diǎn)擊鼠標(biāo)中鍵芜果,則它的返回值是 1
  3. 在事件中點(diǎn)擊鼠標(biāo)右鍵,則它的返回值是 2

按鍵鍵碼

e.keyCode // 鍵盤的鍵碼

按鍵碼:

  1. 回車鍵的按鍵碼是13
  2. 空格鍵是32
  3. 數(shù)字和字母是它對應(yīng)的阿斯克碼值

組合鍵的判斷:

  1. altKey: alt 鍵按下得到true 融师,否則得到false
  2. shiftKey :shift 鍵按下得到 true右钾,否則得到 false
  3. ctrlKey :ctrl 鍵按下得到 true,否則得到 false
document.onkeyup = function (e) {
  e = e || window.event
  keyCode = e.keyCode || e.which
  
  if (e.shiftKey && keyCode === 97) {
    console.log('你同時按下了 shift 和 a')
  }
}

使用說明:火狐firefox2.0和低版本IE中keyCode不兼容,可以使用e.which來獲取

鼠標(biāo)坐標(biāo)點(diǎn)

offsetXoffsetY

從元素內(nèi)部開始計算坐標(biāo)

clientXclientY

相對于瀏覽器的坐標(biāo)

pageXpageY

相對于頁面的坐標(biāo)舀射,會隨著滾動條的滾動而加大

默認(rèn)行為

具有默認(rèn)行為的常見的兩個標(biāo)簽

鏈接<a href="/index.php">點(diǎn)我</a>  <!--往屬性href指定的地址跳轉(zhuǎn) -->
提交按鈕<input type=”submit”>   <!--往form表單屬性action指定的地址跳轉(zhuǎn)-->

阻止默認(rèn)行為的方法:

  1. 給鏈接設(shè)置地址為javascript:;javascript:void(0)

  2. 在事件的最后添加return false

  3. 通過事件對象方法e.preventDefault阻止窘茁,示例:

    function stopDefault(event) {
        var e = event || window.event; 
        if (e.preventDefault){
            e.preventDefault();   // w3c標(biāo)準(zhǔn)瀏覽器
        }else{
            e.returnValue = false; // IE瀏覽器
        }
    }
    

事件委托

事件委托也叫事件代理(看站誰的角度),使用事件委托技術(shù)能避免對每個子節(jié)點(diǎn)添加事件監(jiān)聽,相反把事件監(jiān)聽委托給父元素即可脆烟,這樣可提高綁定事件的性能山林。

<ul>
    <li>首頁</li>
    <li>公司介紹</li>
    <li>產(chǎn)品中心</li>
</ul>
<button id="btn">添加新元素</button>
<script>
var oUl = document.getElementsByTagName("ul")[0];
btn.onclick = function(){
    var oNewLi = document.createElement("li");
    oNewLi.innerText = "新聞中心";
    oUl.appendChild(oNewLi) 
}
oUl.onclick = function(e){
    var ev = e || window.event;
    // 獲取到單擊的目標(biāo)元素dom對象
    var target = ev.target || ev.srcElement;
    // 判斷是否是li標(biāo)簽
    if(target.nodeName == "li"){
        // 完成業(yè)務(wù)邏輯
        alert(target.innerText);
    }
}
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市浩淘,隨后出現(xiàn)的幾起案子捌朴,更是在濱河造成了極大的恐慌,老刑警劉巖张抄,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砂蔽,死亡現(xiàn)場離奇詭異,居然都是意外死亡署惯,警方通過查閱死者的電腦和手機(jī)左驾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來极谊,“玉大人诡右,你說我怎么就攤上這事∏岵” “怎么了帆吻?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咙边。 經(jīng)常有香客問我猜煮,道長,這世上最難降的妖魔是什么败许? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任王带,我火速辦了婚禮,結(jié)果婚禮上市殷,老公的妹妹穿的比我還像新娘愕撰。我一直安慰自己,他們只是感情好醋寝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布搞挣。 她就那樣靜靜地躺著,像睡著了一般音羞。 火紅的嫁衣襯著肌膚如雪柿究。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天黄选,我揣著相機(jī)與錄音蝇摸,去河邊找鬼婶肩。 笑死,一個胖子當(dāng)著我的面吹牛貌夕,可吹牛的內(nèi)容都是我干的律歼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼啡专,長吁一口氣:“原來是場噩夢啊……” “哼险毁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起们童,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畔况,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后慧库,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跷跪,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年齐板,在試婚紗的時候發(fā)現(xiàn)自己被綠了吵瞻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡甘磨,死狀恐怖橡羞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情济舆,我是刑警寧澤卿泽,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站滋觉,受9級特大地震影響签夭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椎瘟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侄旬。 院中可真熱鬧肺蔚,春花似錦、人聲如沸儡羔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汰蜘。三九已至仇冯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間族操,已是汗流浹背苛坚。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工比被, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泼舱。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓等缀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親娇昙。 傳聞我的和親對象是個殘疾皇子尺迂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 每天一句 : 讓思考成為一種習(xí)慣噪裕。 一、事件捕獲 事件綁定方式一(同一事件會被覆蓋) 事件綁定方式二(同一事件可以...
    EndEvent閱讀 259評論 0 2
  • 每天一句 : 讓思考成為一種習(xí)慣。 一皇拣、事件捕獲 事件綁定方式一(同一事件會被覆蓋) 事件綁定方式二(同一事件可以...
    王梓懿_1fbc閱讀 225評論 0 0
  • 一.事件處理模型 當(dāng)一個dom節(jié)點(diǎn)觸發(fā)事件后严蓖,該事件會按照HTML結(jié)構(gòu)在根節(jié)點(diǎn)和這個元素節(jié)點(diǎn)之間傳播,路徑上所有的...
    心存美好閱讀 214評論 0 1
  • 鍵盤事件的類型相對應(yīng)的操作 操作keyCode 不同于 操作charCode this代表的上下文 事件動作得到事...
    南航閱讀 595評論 0 0
  • 什么是事件 掌握事件流 掌握DOM事件流與IE事件處理程序 掌握跨瀏覽器的事件處理程序 掌握event對象的常用屬...
    greenteaObject閱讀 172評論 0 1