【JavaScript ~イベント(入力内容を取得)とDateオブジェクト~】勉強メモ11

JavaScriptちゃんと学習中。
今回は<b>イベントを使ってフォームの入力内容を取得</b>と<b>Dateオブジェクト</b>についてです。
ほぼ自分の勉強メモです。
過度な期待はしないでください。



フォームの入力内容を読み取り出力する
-
　- 先ずは、HTMLでフォーム部分の作成

```.html:HTML
<form action="#" id="form">
  <input type="text" name="word">
  <input type="submit" value="検索">
</form>
<p id="result"></p>
```
- action属性は、データを送信する先のURLを指定するものだが、何処にも送信しない場合は、URLの代わりに「#」を指定する（「#」はページの最上部を指す）
　
- `<p id="output"></p>`は、入力内容を読み取ったものを出力する場所
- name属性の値は、入力されたデータがサーバーに送信される時に、そのデータにつく「名前」となる。フォーム部分にname属性の名前が付いていないと、受信したサーバー側のプログラムで処理されない。

<br>

　- 続いて、name属性を使って送信ボタンがクリックされたら入力内容を読み取るプログラムを作成

```.js:JavaScript
'use strict';

document.getElementById('form').onsubmit = function(event) {
  event.preventDefault();
  const search = document.getElementById('form').word.value;
  document.getElementById('result').textContent = `取得結果：「${search}」`;
};
```
　-ここで先ず重要なのが、<b>preventDefault( )</b>
　preventDefault( ) は、ブラウザが最初から持っているアクションをキャンセルするメソッドになる
　つまり、ここでこれがないと、送信ボタンがクリックされたらデータを送ると同時に、action属性で指定した
　ページに遷移してしまう為、取得結果が表示されない。
　なので、preventDefault( )を使って、データが送信される、次のページに遷移するという
　フォームの基本動作自体をキャンセルさせる。

　-書き方について
　関数の引数にeventと追記、イベント内の関数の第一引数に自動でイベントオブジェクトが渡される。
　イベントオブジェクトには、イベントの発生元の要素や押されたキーの情報などが入っている。
　ここで取得したイベントオブジェクトに対して、event.preventDefault( )を使用することで
　要素のイベントをキャンセルすることが出来る。
<br>

　-入力内容を読み取る部分、`document.getElementById('form').word.value`について
　書き方は、`取得した要素.読み取りたいフォーム部分のname属性.value`となる。
　要素の取得は、今迄使用して来たgetElementByIdメソッドを使用して取得する。
　そして、今回読み取りたいname属性は、`<input type="text" name="word">`のwordを指定する。
　
　これでテキストフィールドの取得が出来たので、次にそこに入力された内容を調べる為に<b>valueプロパティ</b>を使用する。
　valueプロパティには、フォーム部分に入力された内容が保存されている。
　
　これで、フォームの入力内容を読み取り出力させる事が出来る。
　こんな感じで。
<img width="700" alt="ファイル名" src="https://i.gyazo.com/ee0762374cf184cff47f6d50228a9339.png">

Dateオブジェクト
-
- Dateオブジェクトとは

　日時をを扱う為のオブジェクトで、現在の日時を取得する事が出来る。
　
　コード例がこちら。

```.html:HTML
<p>最終アクセス日時：<span id="time"></span></p>
```

```.js:JavaScript 
'use strict';

const now = new Date();
const year = now.getFullYear();
const month = now.getMonth();
const date = now.getDate();
const hour = now.getHours();
const min = now.getMinutes();

const output = `${year}/${month + 1}/${date} ${hour}:${min}`;
document.getElementById('time').textContent = output;
```

　-Dateオブジェクトを使いたい時、先ず最初に<b>インスタンスの生成する</b>必要がある。そのコードが`new Date();`
　newはオブジェクトをインスタンスの生成の為のキーワードで、これをつける事でオブジェクトはインスタンス出来る。
　インスタンスについてはこちらを参照
　[【JavaScript ~クラスやインスタンス、メソッドについて~】勉強メモ④](https://qiita.com/k-yasuhiro/items/f2b6fbbd073b512d548b)

　これで、Dateオブジェクトを使い日時の出力や計算が出来るようになる。そして、その計算の基準日と
　なっているのが現在日時です。なので現在の日時を記憶したDateオブジェクトを使い日時の出力や計算が出来るようになる。

　-続いて、現在の日時を記憶したDateオブジェクトから年月日を取得する為のメソッドが、
　getFullYear( )、getMonth( )、getDate( )、getHour( )、getMinutes( )

|メソッド|説明|
|:---:|:---:|
|getFullYear( )|年を取得する|
|getMonth( )|月を０〜１１の数値で取得する（なので０が1月になる）|
|getDate( )|日を取得する|
|getHour( )|時を取得する|
|getMinutes( )|分を取得する|
その他にも、

|メソッド|説明|
|:---:|:---:|
|getSeconds( )|秒を取得する|
|getDay( )|曜日を０〜６の数値で取得する（なので０が日曜日になる）|
|getTimezoneOffset( )|時差を取得する|
などがある。

　そして注意しなければいけないのは、getMonth( )メソッド。
　このメソッドを使うと「実際に月-１」の数字が取得される。つまり、1月なら「０」、2月なら「１」、12月なら「１１」
　といった具合に取得されるので、所得出来た数字に１を足す必要がある。
　`${month + 1}`という書き方になる。

　後は、それぞれ定数に代入し、getElementByIdメソッドとtextContentプロパティを使い
　取得した要素のコンテンツを書き換えれば完了。
　こんな感じで出力される。

<img width="700" alt="ファイル名" src="https://i.gyazo.com/900b9ab1d5e48f811104eac926df7c00.png">

過去投稿記事
-
[【JavaScript ~変数・定数、if文・switch文~】勉強メモ](https://qiita.com/k-yasuhiro/items/1fb63f0881faf67bcb29)
[【JavaScript ~for文、配列、オブジェクトについて~】勉強メモ②](https://qiita.com/k-yasuhiro/items/6625942cc901feb6bfdf)
[【JavaScript ~関数について~】勉強メモ③](https://qiita.com/k-yasuhiro/items/52e3ebb79bb0248a7c5e)
[【JavaScript ~クラスやインスタンス、メソッドについて~】勉強メモ④](https://qiita.com/k-yasuhiro/items/52e3ebb79bb0248a7c5e)
[【JavaScript ~ファイルの分割について~】勉強メモ⑤](https://qiita.com/k-yasuhiro/items/209eda27bbc61ae961a1)
[【JavaScript 読み込み】勉強メモ⑥](https://qiita.com/k-yasuhiro/items/fe3fc2bd7b14fe4f3968)
[【JavaScript ~配列のメソッド~】勉強メモ⑦](https://qiita.com/k-yasuhiro/items/279b7bb59f112f917c51)
[【JavaScript ~コールバック関数~】勉強メモ⑧](https://qiita.com/k-yasuhiro/private/ded7e2cad732774d059e)
[【JavaScript ~HTMLを置き換え、ダイアログボックス~】勉強メモ⑨](https://qiita.com/k-yasuhiro/items/7a72bf38d78b141d6fac)
[【JavaScript ~イベント~】勉強メモ⑩](https://qiita.com/k-yasuhiro/items/b0d4037d0edaae38a495)
[【JavaScript ~Mathオブジェクト~】勉強メモ12](https://qiita.com/k-yasuhiro/items/b931a15fb71322ee3cca)