JS その他のイベント一覧 focus /blur /change /input /cut /copy /paste など

JS 様々なイベントを理解しよう Java Script
スポンサーリンク

今回は、今までご紹介していない、様々なイベントについて見ていきます。

簡単な紹介になりますが、それぞれ使用する機会はあると思いますので、しっかりと学習していきましょう。

スポンサーリンク

focus と blur

focus」は、要素がフォーカスを受け取った時、「blur」は要素がフォーカスを失った時に発生します。

    <div class="fo">
      <input
        type="email"
        placeholder="メールアドレスを入力してください"
        id="testmail"
      />
    </div>
    <div id="message"></div>
let mail = document.getElementById('testmail');
mail.addEventListener('blur', function () {
  if (!mail.value.includes('@')) {
    mail.classList.add('notmail');
    message.innerHTML = '正しいメールアドレスを入力してください。';
  }
});

mail.addEventListener('focus', function () {
  if (this.classList.contains('notmail')) {
    this.classList.remove('notmail');
    message.innerHTML = '';
  }
});

「メールアドレスを入力してください」という部分に、メールアドレスを入力しないと、下のボックスに「正しいメールアドレスを入力してください。」と表示されます。

再びメールアドレスを記載しようとボックスをクリックすると、下のメッセージは空になります。

最初に、「blur」を使っていますので、メールアドレスのボックスから出るときが、フォーカスから出る時になっています。

再びメールアドレスを記入する時は、「focus」を使っていますので、フォーカスした時に、「notmail」というクラスが設定されていれば、そのクラスを削除して、下のボックスを空にしています。

もう一つ例を見てみましょう。

    <div class="fo">
      <input
        type="password"
        placeholder="6桁のパスワードを入力"
        id="checkpass"
      />
    </div>
let pass = document.getElementById('checkpass');
pass.addEventListener('focus', function (e) {
  e.target.style.backgroundColor = '#ff99cc';
});

pass.addEventListener('blur', function (e) {
  e.target.style.backgroundColor = '';
});

パスワードの入力画面ですが、ボックスをクリックすると、フォーカスされるので、背景色が変わります。

また、ボックスから離れると、フォーカスから出ますので、背景がなしになっています。

「focus」イベントは一部の要素、button、input、select、a などでしか使用することが出来ません。

その他の要素で使用する時は、HTML属性の「tabindex」を使用すると、「focus」を使用出来るようになります。

MDN : tabindex

「focus, blur」はバブリングしませんが、バブリングを必要とする時は、「focusin, forcusout」を使います。

基本的な機能はどちらも同じです。

change

change」は、inputなど、ユーザーの操作によって値の変更が確定した時に発生します。

    <div class="box">
      <label class="choice"
        >好きなフルーツを選択してください。
        <select class="fruits" name="fruits">
          <option value="">以下から選んでください。</option>
          <option value="banana">バナナ</option>
          <option value="apple">りんご</option>
          <option value="strawberry">いちご</option>
          <option value="orange">オレンジ</option>
        </select>
      </label>
    </div>
    <div class="result"></div>
let fruitsChoice = document.querySelector('.fruits');

fruitsChoice.addEventListener('change', function () {
  let result = document.querySelector('.result');
  result.textContent =
    fruitsChoice.options[fruitsChoice.selectedIndex].textContent +
    'は人気のフルーツです!';
});

選択メニューで値を変更すると、イベントが発生します。

input

input」は値が変更された時に発生するイベントです。

先程の「change」と少し似ていてますが、「input」はテキストが1文字でも入力されるたびに、イベントが発生します。

    <div class="input">
      <label for="put"
        >好きなフルーツの名前
        <input type="text" id="put" />
      </label>
    </div>
    <div class="out"></div>
let inPut = document.getElementById('put');
inPut.addEventListener('input', function (e) {
  let outPut = document.querySelector('.out');
  outPut.innerHTML = e.currentTarget.value;
  console.log(e.currentTarget.value);
});

ボックス内に好きなフルーツの名前を入力します。

コンソールを見ていただくと、以下のようになっています。

 s
 st
 str
 stra
 straw
 strawb
 strawbe
 strawber
 strawberr
 strawberry
 strawberr
 strawber
 strawbe
 strawb
 straw
 stra
 str
 st
 s

「strawberry」と入力して、削除しています。

文字を入力、削除してもイベントが発生しているのが分かります。

cut/copy/paste

「cut/copy/paste」、それぞれの操作を行った時に発生するイベントです。

    <div class="text">
      <textarea name="copy" id="paste" cols="30" rows="10"></textarea>
    </div>
let textArea = document.getElementById('paste');
textArea.addEventListener('cut', () => {
  alert('Cut');
});
textArea.addEventListener('copy', () => {
  alert('Copy');
});
textArea.addEventListener('paste', () => {
  alert('Paste');
});

ボックス内で、コピー、ペースト、カットのどれかの操作を行うとアラートが表示されます。

load / DOMContentLoaded

「load」は、ページのすべての読み込みが完了したときに発生し、「DOMContentLoaded」は、DOMツリーの構築が完了したときに発生するイベントです。

window.addEventListener('load', () => {
  console.log('load');
});
document.addEventListener('DOMContentLoaded', () => {
  console.log('DOMContentLoaded');
});

DOMContentLoaded
load

コンソールを見ていただくと、「DOMContentLoaded」が最初に発生していて、「load」が後で発生しているのが分かると思います。

スポンサーリンク

あとがき

様々なイベントについてご紹介させて頂きました。

その他のイベントもたくさんありますが、実際に出てきた時に覚えていけば良いと思います。

今回も最後までお読み頂きありがとうございました。

タイトルとURLをコピーしました