0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

addEventListener の第3引数の false

Posted at

なんかのテキストで
addEventListener の第3引数に false をつける箇所があった

  const lists = document.getElementById('lists');
  const target = document.getElementById('btn');
  target.addEventListener('click', function() {
    const form = document.getElementById('name');
    const list = document.createElement('li');
    list.textContent = form.value;
    lists.appendChild(list);
    form.value = "";
  },false); (←ここ)

これってなんだって思って調べた

どうやらキャプチャフェーズとバブリングフェーズの制御をしているらしい

イベントの伝播が
親要素から起こるのと
イベント発生部から起こるかの違いとのこと

なるほど全然分からん。
って思いいろいろ試してみた

第3引数が false の場合

<body>
  <div id="div1">
    div1
    <div id="div2">
      div2
        <div id="div3">
          div3
        </div>
    </div>
  </div>
  <script>
    const target1 = document.getElementById("div1")
    const target2 = document.getElementById("div2")
    const target3 = document.getElementById("div3")
    target1.addEventListener("click", () => {
      alert("div1")
    }, false)
    target2.addEventListener("click", () => {
      alert("div2")
    }, false)
    target3.addEventListener("click", () => {
      alert("div3")
    }, false)
  </script>
</body>
</html>

こんなコードがあるとして

div3 をクリックするとイベントの伝播が起きるので
div3 ⇒ div2 ⇒ div1 の順でアラートがでる

第3引数が true の場合

<body>
  <div id="div1">
    div1
    <div id="div2">
      div2
        <div id="div3">
          div3
        </div>
    </div>
  </div>
  <script>
    const target1 = document.getElementById("div1")
    const target2 = document.getElementById("div2")
    const target3 = document.getElementById("div3")
    target1.addEventListener("click", () => {
      alert("div1")
    }, true)
    target2.addEventListener("click", () => {
      alert("div2")
    }, true)
    target3.addEventListener("click", () => {
      alert("div3")
    }, true)
  </script>
</body>
</html>

このコードも上と同じ
ただ第3引数は true にしている

今回は div3 をクリックすると親要素からイベントの伝播が起きる
つまり
div1 ⇒ div2 ⇒ div3 の順でアラートがでる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?