今回は、今までご紹介していない、様々なイベントについて見ていきます。
簡単な紹介になりますが、それぞれ使用する機会はあると思いますので、しっかりと学習していきましょう。
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」が後で発生しているのが分かると思います。
あとがき
様々なイベントについてご紹介させて頂きました。
その他のイベントもたくさんありますが、実際に出てきた時に覚えていけば良いと思います。
今回も最後までお読み頂きありがとうございました。