5
4

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.

フォームのJavaScript

Last updated at Posted at 2019-12-01

フォームでJavaScriptで何かするときの参考用です。
フォームのCSSフォームのHTMLも併せてご参照ください。

フォーカス

フォーカス状態の変更イベント

html
<form name="contactForm">
  <input name="focusTest" />
</form>
js
const focusTest = document.contactForm.focusTest;
 
focusTest.addEventListener("focus", () => {
  console.log("フォーカスされた");
});
 
focusTest.addEventListener("blur", () => {
  console.log("フォーカスが外れた");
});

input [type="text"]

値の取得

html
<form name="contactForm">
  <input name="inputText" type="text" value="こんにちは" />
</form>
js
const inputText = document.contactForm.inputText;
 
console.log(inputText.value);

値の変更

html
<form name="contactForm">
  <input name="inputText" type="text" value="こんにちは" />
</form>
js
const inputText = document.contactForm.inputText;
 
inputText.value = "こんばんは";

値の変更イベント

イベント タイミング
change 値変更されて、フォーカスが外れた時、Enterが押された時
input キー入力時
html
<form name="contactForm">
  <input name="inputText" type="text" value="こんにちは" />
</form>
js
const inputText = document.contactForm.inputText;
 
inputText.addEventListener("change", () => {
  console.log("値が変更された");
})
 
inputText.addEventListener("input", () => {
  console.log("キーが押された");
})

input[type="range"]

値の取得

html
<form name="contactForm">
  <input name="inputRange" type="range">
 /form>
js
const inputRange = document.contactForm.inputRange;

console.log(inputRange.value);

値の変更

html
<form name="contactForm">
  <input name="inputRange" type="range">
</form>
js
const inputRange = document.contactForm.inputRange;
 
inputRange.value = 100;

値の変更イベント

イベント タイミング
change 止まってから
input 動くたび
html
<form name="contactForm">
  <input name="inputRange" type="range">
</form>
js
const inputRange = document.contactForm.inputRange;
 
inputRange.addEventListener("change", () => {
  console.log(inputRange.value);
});

input[type="color"]

値の取得

html
<form name="contactForm">
  <input name="inputColor" type="color">
</form>
js
const inputColor = document.contactForm.inputColor;
 
console.log(inputColor.value);

値の変更

html
<form name="contactForm">
  <input name="inputColor" type="color">
</form>
js
const inputColor = document.contactForm.inputColor;

inputColor.value = "#ffffff";

値の変更イベント

html
<form name="contactForm">
  <input name="inputColor" type="color">
</form>
js
const inputColor = document.contactForm.inputColor;

inputColor.addEventListener("change", () => {
  console.log(inputColor.value);
})

input[type="file"]

ファイル情報の取得

html
<form name="contactForm">
  <input name="inputfile" type="file" multiple>
</form>
js
const inputfile = document.contactForm.inputfile;

inputfile.addEventListener("change", () => {
 
  for (let i = 0; i < event.target.files.length; i++) {
 
    console.log(`ファイル名:${event.target.files[i].name}`);
    console.log(`ファイルサイズ:${event.target.files[i].size}`);
    console.log(`ファイルタイプ:${event.target.files[i].type}`);
    console.log(`ファイル最終更新日時:${event.target.files[i].lastModifiedDate}`);
    console.log(`ファイル最終更新日時(UNIXタイムスタンプ):${event.target.files[i].lastModified}`);
     
  }
 
});

テキストファイルの内容を読み込む

html
<form name="contactForm">
  <input name="inputfile" type="file" multiple accept=".txt">
</form>
js
const inputfile = document.contactForm.inputfile;
 
inputfile.addEventListener("change", () => {
 
  for (let i = 0; i < event.target.files.length; i++) {
 
    console.log(`ファイル名:${event.target.files[i].name}`);
    console.log(`ファイルサイズ:${event.target.files[i].size}`);
    console.log(`ファイルタイプ:${event.target.files[i].type}`);
    console.log(`ファイル最終更新日時:${event.target.files[i].lastModifiedDate}`);
    console.log(`ファイル最終更新日時(UNIXタイムスタンプ):${event.target.files[i].lastModified}`);
 
    const txtReader = new FileReader();
 
    txtReader.addEventListener("load", () => {
       console.log(txtReader.result);
    });
 
    txtReader.readAsText(event.target.files[i]);
 
  }
 
});

画像をDataURLとして読み込んで表示

html
<form name="contactForm">
  <input name="inputfile" type="file" multiple accept=".jpg,.png,.gif,.svg">
</form>
<div id="js-imgArea"></div>
js
const inputfile = document.contactForm.inputfile;
const imgArea = document.querySelector("#js-imgArea");

inputfile.addEventListener("change", () => {
 
  for (let i = 0; i < event.target.files.length; i++) {
   
    console.log(`ファイル名:${event.target.files[i].name}`);
    console.log(`ファイルサイズ:${event.target.files[i].size}`);
    console.log(`ファイルタイプ:${event.target.files[i].type}`);
    console.log(`ファイル最終更新日時:${event.target.files[i].lastModifiedDate}`);
    console.log(`ファイル最終更新日時(UNIXタイムスタンプ):${event.target.files[i].lastModified}`);
 
    const imgReader = new FileReader();
     
    imgReader.addEventListener("load", () => {
      const img = document.createElement("img");
      img.src = imgReader.result;
      imgArea.appendChild(img);
    });
    
    imgReader.readAsDataURL(event.target.files[i]);

  }

});

ラジオボタン

値の取得

html
<form name="contactForm">
  <input type="radio" name="radioGroup" id="form__input--radio1" value="a" checked>
  <label for="form__input--radio1">a</label>
  <input type="radio" name="radioGroup" id="form__input--radio2" value="b">
  <label for="form__input--radio2">b</label>
</form>
js
const radioGroup = document.contactForm.radioGroup;
 
console.log(`${radioGroup.value}が選択されている`);

値の変更

html
<form name="contactForm">
  <input type="radio" name="radioGroup" id="form__input--radio1" value="a" checked>
  <label for="form__input--radio1">a</label>
  <input type="radio" name="radioGroup" id="form__input--radio2" value="b">
  <label for="form__input--radio2">b</label>
</form>
js
const radioGroup = document.contactForm.radioGroup;

radioGroup.value = "b";

値の変更イベントを取得

html
<form name="contactForm">
  <input type="radio" name="radioGroup" id="form__input--radio1" value="a">
  <label for="form__input--radio1">a</label>
  <input type="radio" name="radioGroup" id="form__input--radio2" value="b">
  <label for="form__input--radio2">b</label>
</form>
js
const form = document.contactForm;

form.addEventListener("change", () => {
  console.log(`${form.radioGroup.value}が選択された`);
});

チェックボックス

値の取得

html
<form name="contactForm">
  <input name="checkbox1" type="checkbox" checked>
  <input name="checkbox2" type="checkbox">
</form>
js
const checkbox1 = document.contactForm.checkbox1;
console.log(checkbox1.checked);

const checkbox2 = document.contactForm.checkbox2;
console.log(checkbox2.checked);

値の変更

html
<form name="contactForm">
  <input name="checkbox" type="checkbox">
</form>
js
const checkbox = document.contactForm.checkbox;

checkbox.checked = true;

値の変更イベント

イベント タイミング
change 値が変更されて、フォーカスが外れた時
html
<form name="contactForm">
  <input name="checkbox" type="checkbox">
</form>
js
const checkbox = document.contactForm.checkbox;
        
checkbox.addEventListener("change", () => {
  console.log("チェックボックスの状態が変更された");

  if (checkbox.checked === false) {
    console.log("チェックが外れた");
  }

  if (checkbox.checked === true) {
    console.log("チェックされた");
  }
 
});

セレクトボックス

値の取得

html
<form name="contactForm">
  <select name="select">
    <option value="a">a</option>
    <option value="b" selected>b</option>
    <option value="c">c</option>
  </select>
</form>
js
const select = document.contactForm.select;
 
console.log(select.value);

値の変更

html
<form name="contactForm">
  <select name="select">
    <option value="a">a</option>
    <option value="b" selected>b</option>
    <option value="c">c</option>
  </select>
</form>
js
const select = document.contactForm.select;
 
select.value = "c";

値の変更イベント

html
<form name="contactForm">
  <select name="select">
    <option value="a">a</option>
    <option value="b" selected>b</option>
    <option value="c">c</option>
  </select>
</form>
js
const select = document.contactForm.select;
 
select.addEventListener("change", () => {
  console.log(`${select.value}が選択された`);
})

textarea

値の取得

html
<form name="contactForm">
  <textarea name="textarea">こんにちは</textarea>
</form>
js
const textarea = document.contactForm.textarea;

console.log(textarea.value);

値の変更

html
<form name="contactForm">
  <textarea name="textarea">こんにちは</textarea>
</form>
js
const textarea = document.contactForm.textarea;

textarea.value = "こんばんは";

値の変更イベント

イベント タイミング
change 値変更されて、フォーカスが外れた時
input キー入力時
html
<form name="contactForm">
  <textarea name="textarea">こんにちは</textarea>
</form>
js
const textarea = document.contactForm.textarea;
 
textarea.addEventListener("change", () => {
  console.log("値が変更された");
});
 
textarea.addEventListener("input", () => {
  console.log("キーが押された");
});

submit

フォームの送信前イベント

html
<form name="contactForm" action="thanks.php" method="post">
  <button type="submit">送信</button>
</form>
js
const form = document.contactForm;
 
  form.addEventListener("submit", () => {
 
  const confirmFlag = confirm("送信OK?");
  console.log(confirmFlag);
 
  if (confirmFlag === false) {
    event.preventDefault();
  }
 
})

イベントの移譲

子要素を挿入した場合に新たなイベントリスナーを追加する必要がありません。

フォーム内のすべてのinputにイベントリスナーを追加する例

html
<form name="contactForm" action="thanks.php" method="post">
  <input type="text">
  <input type="tel">
  <input type="date">
  <input type="email">
</form>
js
contactForm.addEventListener('change', (e) => {
     const target = e.target;
     if (target.matches('input')) {
         console.log(target.value)
     }
 });
5
4
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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?