課題【練習問題(DOM操作/イベント操作)】ーNo.004
課題内容
- <概要>
- 数値を入力するためのinputタグを準備しましょう。
- そのinputタグは、typeをnumberにしておきましょう。
- inputタグの初期値として「1」を設定しましょう。
- これとは別に、2つのボタンを用意しましょう。
- 1つ目:「実行」という文字のボタン。
- 2つ目:「リセット」という文字のボタン。
- この2つのボタンを用意して、
- それぞれのボタンが押された時に、
- それぞれの処理を行ってみましょう。
- 1つ目の「実行」ボタンが押された時は、
- input(number)の値を取得して、
- その値の数だけ、プロンプトを表示して値を取得しましょう。
- 取得した値は、全て文字列として連結して、
- 結果として表示しましょう。
- 2つ目の「リセット」ボタンが押された時は、
- 結果の値を空文字の表示(初期表示)に戻しましょう。
出力結果
初期表示として、
このような表示になるように、
HTMLで表示を作りましょう。
ボタンを押した時の表示の変更は、
以下のようになります。
ボタンを押した時
このボタンが押された時は、
入力の指定回数に設定されているinput(number)の値の回数だけ、
このプロンプトを表示して、
入力した値を取得しましょう。
この指定回数の入力した値は、
文字列として連結して結果に表示しましょう。
例えば、
input(number)で指定回数が「3」の時に、
プロンプトの入力として、
1回目:りんご
2回目:みかん
3回目:バナナ
という入力が行われた場合は、
結果として、
このように、
値の、「りんご」「みかん」「ばなな」を連結して、
結果として表示します。
また、
ボタンの「リセット」が押されたときは、
このように、
結果を空文字に戻して、
表示が上記のようになります。
実際の動きを確認(サンプルの動き)
サンプルの動きとして、
以下を参考にしてください。
ポイント(numberのinputタグの値の取得)
DOM操作で、
inputタグでも「number」を使った時の値の取得は、
「textContent」ではなく、「value」を使って取得します。
使い方としては、
以下を参考にしましょう。
答え
HTML
<html>
<head>
<meta charset="UTF-8">
<title>Sample Dom/Event</title>
</head>
<body>
<div>
<label class="">入力の回数指定</label>
<input type="number" id="action-count" value="1"/>
</div>
<div>
<label class="text-result">結果:</label>
</div>
<div>
<button id="action-start">実行</button>
<button id="action-reset">リセット</button>
</div>
</body>
<script type="text/javascript" src="sample.js"></script>
</html>
javaScript
let sampleResult = document.querySelector('.text-result');
let sampleActionCount = document.querySelector('#action-count');
let sampleActionStart = document.querySelector('#action-start');
let sampleActionReset = document.querySelector('#action-reset');
const baseText = '結果;';
sampleActionStart.addEventListener('click',event => {
// 繰り返し回数を取得
let loopCount = sampleActionCount.value;
let resultValue = '';
// プロンプトを繰り返し
for(let idx=0;idx<loopCount;idx++) {
let val = prompt('値を入力してください');
resultValue = resultValue + val.toString();
}
// 表示を更新
sampleResult.textContent = baseText + resultValue;
})
sampleActionReset.addEventListener('click',event => {
// 表示を更新
sampleResult.textContent = baseText;
})