JavaScriptでTodoリスト。
SwftUIでTodoやったんでJavaScriptでも簡単Todoリスト。
JSBinで試しながらやってます。参考サイトは以下。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ToDo-List</title>
<style>
body{
font-family:sans-serif;
}
</style>
</head>
<body>
<h2>ToDoリスト</h2>
<form>
<input class="task_value" type="text" />
<button class="task_submit" type="button">追加!</button>
</form>
<div>
<h3>一覧</h3>
<ul class="task_list"></ul>
</div>
</body>
</html>
こんな感じになります。
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ToDo-List</title>
</head>
<body>
</body>
</html>
基本のHTMLタグです。これにCSS
<style>
body{
font-family:sans-serif;
}
</style>
ホームページの文字をゴシックにします。
<h2>ToDoリスト</h2>
<h2>で表題
<form>
<input class="task_value" type="text" />
<button class="task_submit" type="button">追加!</button>
</form>
<form>で入力部分
<div>
<h3>一覧</h3>
<ul class="task_list"></ul>
</div>
出力部分。ここに追加したリスト項目が出てきます。
JavaScript
タグにつけられてclass名を目印にJavaScritを使って動かします。
まずタグで指定したデータを取得します。変数に入れていきます。
const taskValue = document.getElementsByClassName('task_value')[0];
const taskSubmit = document.getElementsByClassName('task_submit')[0];
const taskList = document.getElementsByClassName('task_list')[0];
"[0]"となっているのはクラスを持つ最初の要素を取得する場合には必要です。クラスは複数ある場合があるので配列的なデータの扱いとなっています。
実際の動きを見ていきます。
追加ボタンが押されたら、という動作は
taskSubmit.addEventListener('click', e => {
e.preventDefault();
const task = taskValue.value;
addTasks(task);
taskValue.value = '';
});
class名"taskSubmit"という目印を使います。これにクリックした場合の動きを決めます。
これはちょっとわかりにくですがブラウザ側の規定の動作をキャンセルするして次の動作をさせることができます。
では入力のあった文字を 関数addTasks(task)で処理して taskValue.value = ''で入力した文字を空欄にしています。
addTasks()は
const addTasks = (task) => {
const listItem = document.createElement('li');
const showItem = taskList.appendChild(listItem);
showItem.innerHTML = task;
const deleteButton = document.createElement('button');
deleteButton.innerHTML = 'Delete';
listItem.appendChild(deleteButton);
deleteButton.addEventListener('click', e => {
e.preventDefault();
deleteTasks(deleteButton);
});
};
新しいリストの追加と、削除ボタンを作る、そして削除ボタンを出現させて、削除ボタン押せば追加したリストを消せます。
削除ボタンは 関数"deleteTasks(deleteButton)"を使います。
全コードは
const taskValue = document.getElementsByClassName('task_value')[0];
const taskSubmit = document.getElementsByClassName('task_submit')[0];
const taskList = document.getElementsByClassName('task_list')[0];
const addTasks = (task) => {
const listItem = document.createElement('li');
const showItem = taskList.appendChild(listItem);
showItem.innerHTML = task;
const deleteButton = document.createElement('button');
deleteButton.innerHTML = 'Delete';
listItem.appendChild(deleteButton);
deleteButton.addEventListener('click', e => {
e.preventDefault();
deleteTasks(deleteButton);
});
};
const deleteTasks = (deleteButton) => {
const chosenTask = deleteButton.closest('li');
taskList.removeChild(chosenTask);
};
taskSubmit.addEventListener('click', e => {
e.preventDefault();
const task = taskValue.value;
addTasks(task);
taskValue.value = '';
});
関数はアロー関数を使ってEvent objectを利用します。
おまけ。
ついでにSwiftUIでTodoに追加するだけの簡単なものを作ってみます。
import SwiftUI
struct ContentView: View {
@State var arrs = ["apple","orange","sp"]
@State var inp = ""
var body: some View {
NavigationStack{
VStack{
HStack{
TextField("入力してください", text: $inp)
.padding(20)
Button(action: {
arrs.append(inp)
}){
Text("Button")
}
}
List(arrs,id:\.self){arr in
Text(arr)
} .navigationTitle("Todo List")
}
}
}
}
配列に追加することでリストに追加しています。
この記事が気に入ったらサポートをしてみませんか?