第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

JavaScript 入門(mén)教程

DOM 事件綁定

DOM 提供了許多事件供開(kāi)發(fā)者進(jìn)行綁定,以響應(yīng)各種操作,豐富頁(yè)面交互。

想要觸發(fā)事件,就得先給 DOM 節(jié)點(diǎn)綁定事件,提供事件處理器。

1. 直接在 HTML 上提供事件

這種方式是將事件內(nèi)聯(lián)在 HTML 代碼中。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<style>
  .box {
    width: 100px;
    height: 100px;
    background: green;
  }
</style>

<div class="box" onclick="alert('耶耶耶耶耶!')"></div>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

圖片描述

通過(guò)設(shè)置 HTML 的 onclick 屬性,可以綁定點(diǎn)擊事件,屬性內(nèi)可以寫(xiě)簡(jiǎn)單的 JavaScript 代碼。

但是可以看到這種方式是有局限性的,寫(xiě)大量的 JavaScript 代碼在里面肯定是不合理的。

過(guò)去網(wǎng)頁(yè)的交互相對(duì)較少,會(huì)在 body 標(biāo)簽上綁定 onload 事件,即頁(yè)面加載完畢后做的事情。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<script>
  function load() {
    alert('頁(yè)面加載完畢啦!');
  }
</script>
<body onload="load()">
  <div>我是一段濫竽充數(shù)文案。</div>
</body>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

onload="load()" 即表示在頁(yè)面加載完成后,執(zhí)行 load 函數(shù)?,F(xiàn)在翻閱部分文獻(xiàn),依然能夠看到這種寫(xiě)法。

2. 設(shè)置事件處理器屬性

通過(guò)事件處理器屬性設(shè)置綁定事件,需要先獲取到 DOM 節(jié)點(diǎn)。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<style>
  .btn {
    border: 1px solid #4caf50;
    font-size: 22px;
    padding: 8px 12px;
    color: #4caf50;
    outline: none;
  }
  .btn:active {
    background: #eee;
  }
</style>

<button class="btn">
  我是一個(gè)可以改變一切的按鈕
</button>

<script>
  var btn = document.querySelector('.btn');

  btn.onclick = function() {
    var text = btn.innerText;

    btn.innerText = text.replace('一切', '世界');
  };
</script>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

圖片描述

通過(guò) onclick 就可以設(shè)置按鈕的點(diǎn)擊事件。

如果需要清除事件,可以重新將屬性重新設(shè)置為 null。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<style>
  .btn {
    border: 1px solid #4caf50;
    font-size: 14px;
    padding: 8px 12px;
    color: #4caf50;
    outline: none;
  }
  .btn:active {
    background: #eee;
  }
  
  p {
    font-size: 22px;
  }
</style>


<button class="btn">
  我是一個(gè)可以改變一切的按鈕
</button>

<p>1</p>

<script>
  var btn = document.querySelector('.btn');
  var p = document.querySelector('p');
  var total = 1;

  btn.onclick = function() {
    p.innerText = ++total;

    if (total >= 5) {
      btn.onclick = null;
    }
  };
</script>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

這種綁定事件的方式依然常用,各種文獻(xiàn)的 demo 也會(huì)采用這種方式,但缺點(diǎn)是同一個(gè)事件在沒(méi)有其他輔助條件下,只能綁定一個(gè)事件處理器。

3. 使用 element.addEventListener 綁定事件

使用 DOM 節(jié)點(diǎn)的 addEventListener 方法也可以綁定事件。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<style>
  .btn {
    border: 1px solid #4caf50;
    font-size: 14px;
    padding: 8px 12px;
    color: #4caf50;
    outline: none;
  }
  .btn:active {
    background: #eee;
  }

  input {
    padding: 10px 12px;
    font-size: 14px;
    outline: none;
  }
  
  p {
    font-size: 22px;
  }
</style>


<input type="text">

<button class="btn">
  按鈕
</button>

<p>1</p>

<script>
  var btn = document.querySelector('.btn');
  var input = document.querySelector('input');
  var p = document.querySelector('p');

  var total = 1;

  btn.addEventListener('click', function() {
    input.value = input.value.split('').reverse().join('');
    btn.value = input.value;
    p.innerText = input.value;
  });

  input.addEventListener('keyup', function() {
    btn.innerText = input.value;
  });
</script>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

圖片描述

addEventListener 的第一個(gè)參數(shù)是事件類(lèi)型,和使用事件處理器屬性HTML內(nèi)聯(lián)事件不同,這個(gè)方法的事件類(lèi)型不需要 on 前綴。

第二個(gè)參數(shù)就是事件處理器,即觸發(fā)事件時(shí)要做的事情。

使用 addEventListener 可以綁定多個(gè)事件處理器。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<style>
  .btn {
    border: 1px solid #4caf50;
    font-size: 14px;
    padding: 8px 12px;
    color: #4caf50;
    outline: none;
  }
  .btn:active {
    background: #eee;
  }
</style>

<button class="btn">
  按鈕
</button>
<p></p>

<script>
  var btn = document.querySelector('.btn');
  var p = document.querySelector('p');
  var total = 1;

  btn.addEventListener('click', function() {
    btn.innerText = ++total;
  });

  btn.addEventListener('click', function() {
    p.innerText = total;
  });
</script>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

一個(gè)事件綁定多個(gè)事件處理器,其執(zhí)行順序是按照綁定順序來(lái)的。

如果需要去除事件,可以使用 removeEventListener 方法。

實(shí)例演示
預(yù)覽 復(fù)制
復(fù)制成功!
<style>
  .btn {
    border: 1px solid #4caf50;
    font-size: 14px;
    padding: 8px 12px;
    color: #4caf50;
    outline: none;
  }
  .btn:active {
    background: #eee;
  }
</style>

<button class="btn">
  按鈕
</button>

<script>
  var btn = document.querySelector('.btn');
  var total = 1;

  function fn() {
    btn.innerText = ++total;

    if (total > 5) {
      btn.removeEventListener('click', fn);
    }
  }

  btn.addEventListener('click', fn);
</script>
運(yùn)行案例 點(diǎn)擊 "運(yùn)行案例" 可查看在線運(yùn)行效果

使用 removeEventListener 去除事件,需要傳遞指定的事件,且事件處理器必須與綁定事件傳入的一樣,為同一個(gè)。

addEventListener 與 removeEventListener 還具有第三個(gè)參數(shù),會(huì)在事件流章節(jié)進(jìn)行討論。

IE8及以下都不支持該方法,需要使用IE提供的 attachEvent 與 detachEvent 來(lái)處理事件

4. DOM 事件級(jí)別

目前常討論的 DOM 級(jí)別有 4 級(jí),為 DOM 0級(jí)DOM 3級(jí),這里的級(jí)可以理解成標(biāo)準(zhǔn)的版本。

這 4 級(jí)內(nèi)容中, DOM 1級(jí)沒(méi)有提供事件相關(guān)的內(nèi)容,所以不會(huì)拿來(lái)討論,因此 DOM 事件就被分為了常說(shuō)的 DOM 0級(jí)事件、DOM 2級(jí)事件、DOM 3級(jí)事件。

  • DOM 0級(jí) 提供的事件綁定方式為在HTML 上內(nèi)聯(lián)事件事件處理器屬性。
  • DOM 2級(jí) 提供了 addEventListenerremoveEventListener 方法。
  • DOM 3級(jí) 則是在 2 級(jí)的基礎(chǔ)上進(jìn)行了擴(kuò)充,添加了更多的事件類(lèi)型。

事實(shí)上 DOM 0級(jí)事件并不是標(biāo)準(zhǔn)中的,在 W3C 制定 DOM 標(biāo)準(zhǔn)前,部分瀏覽器已經(jīng)有了 DOM 模型,也有自己相應(yīng)的事件,這些出現(xiàn)在標(biāo)準(zhǔn)第一個(gè)版本之前的,就被稱(chēng)為了 DOM 0。

5. 小結(jié)

綁定 DOM 事件可以通過(guò)以下三種方式:

  1. 將事件內(nèi)聯(lián)在 HTML 中
  2. 使用 事件處理器屬性 綁定事件
  3. 使用 addEventListenerremoveEventListener 處理事件

前兩種方式不能綁定多個(gè)事件處理器,三種綁定方式由不同版本的 DOM 標(biāo)準(zhǔn)提供,通常使用 DOM 級(jí)別進(jìn)行區(qū)分。