Dieses Mal werde ich Ihnen eine detaillierte Erklärung der JS-Implementierung von Todolist geben. Was sind die Vorsichtsmaßnahmen für die JS-Implementierung von Todolist?
Dieser Artikel führt Sie in die relevanten Wissenspunkte zur Implementierung der Todolist-Funktion durch natives JavaScript ein. Freunde in Not können sich darüber informieren.
Dieses Projekt kann hauptsächlich js üben, um den Dom, Ereignisse, die logische Beziehung zwischen Ereignisauslösung und das Schreiben in den Cache und das Abrufen des Caches zu steuern.
Hauptfunktionen:
Benutzereingaben zu Aufgabenelementen hinzufügen
Todolist kann klassifiziert und vom Benutzer überprüft werden it Gruppieren Sie die Aufgabenelemente in der abgeschlossenen Gruppe
Jedes Element in der Aufgabenliste kann gelöscht und bearbeitet werden
Benutzereingabedaten in localStorage schreiben Lokaler Cache, um die Eingabedaten zu speichern
Kann den lokalen Cache unter dem Domänennamen leeren und alle Todolist-Elemente löschen
Spezifisch Funktionen Implementierung
HTML-Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE html>
<html lang= "en" >
<head>
<meta charset= "UTF-8" >
<title>todolist-prime</title>
<link rel= "stylesheet" href= "yuansheng.css" rel= "external nofollow" >
</head>
<body>
<header>
<section>
<label for = "add_list" >My todolist</label>
<input type= "text" id= "add_list" name= "add_list" placeholder= "type here" required>
</section>
</header>
<p class = "content" >
<h1>未完成<span id= "todocount" ></span></h1>
<ol id= "todolist" >
</ol>
<h1>已完成<span id= "donecount" ></span></h1>
<ol id= "donelist" >
</ol>
</p>
<p id= "clear" >
<span style= "white-space:pre;" > </span><button id= "clearbutton" ><h3>全部清除</h3></button>
</p>
<script src= "todolist-prime.js" ></script>
</body>
</html>
|
Nach dem Login kopieren
JS-Code und Analyse
Erstellen Sie ein Array-Objekt, um die vom Benutzer eingegebenen Daten zu speichern , das Array Jedes Element ist ein Objekt, und das Attribut „todo“ des Objekts speichert die vom Benutzer eingegebenen Daten. Das Attribut „done“ kann als Bezeichnung der vom Benutzer eingegebenen Daten verstanden werden und wird hauptsächlich zur Klassifizierung verwendet „todo“-Werte.
Jedes Mal, wenn der Benutzer die Dateneingabe abschließt, muss der Cache aktualisiert und das Eingabefeld initialisiert werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function addTodolist(e) {
var obj_list = {
todo: "" ,
done: false
};
document.getElementById( "add_list" ).value = document.getElementById( "add_list" ).value.trim();
if (document.getElementById( "add_list" ).value.length === 0){
alert( "不能为空" );
return ;
}
obj_list.todo = document.getElementById( "add_list" ).value;
todolist.push(obj_list);
saveData(todolist);
document.getElementById( "add_list" ).value = "" ;
load();
document.getElementById( "add_list" ).focus();
}
|
Nach dem Login kopieren
Fügen Sie die Eingabedaten zum Dom-Knoten hinzu und klassifizieren Sie sie entsprechend dem Wert des Eingabedatenattributs („fertig“).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <span style= "font-size:14px;" > function load(){
var todo = document.getElementById( "todolist" ),
done = document.getElementById( "donelist" ),
todocount = document.getElementById( "todocount" ),
donecount = document.getElementById( "donecount" ),
todoString = "" ,
doneString = "" ,
todoCount = 0,
doneCount = 0;
document.getElementById( "add_list" ).focus();
todolist = loadData();
if (todolist != null){
for ( var i=0; i<todolist.length; i ++){
if (!todolist[i].done){
todoString += "<li>"
+ "<input type='checkbox' onchange='update(" +i+ ", \"done\", true)'>"
+ "<p id='p-" +i+ "' onclick='edit(" +i+ ")'>" + todolist[i].todo + "</p>" +
"<a onclick='remove(" +i+ ")'>-</a>" +
"</li>" ;
todoCount ++;
}
else {
doneString += "<li>"
+ "<input type='checkbox' "
+ "onchange='update(" +i+ ", \"done\", false)' checked>"
+ "<p id='p-" +i+ "' onclick='edit(" +i+ ")'>" + todolist[i].todo + "</p>"
+ "<a onclick='remove(" +i+ ")'>-</a>"
+ "</li>" ;
doneCount ++;
}
}
todo.innerHTML = todoString;
done.innerHTML = doneString;
todocount.innerHTML = todoCount;
donecount.innerHTML = doneCount;
}
else {
todo.innerHTML = "" ;
done.innerHTML = "" ;
todocount.innerHTML = 0;
donecount.innerHTML = 0;
}
}</span>
|
Nach dem Login kopieren
Klicken Sie auf das Element, um das Bearbeitungsereignis auszulösen, fügen Sie das bearbeitbare Formularsteuerelement in den Absatz ein und aktualisieren Sie die im Todolist-Array gespeicherten Daten mit dem vom Benutzer über die Aktualisierungsfunktion eingegebenen Wert
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | function edit(i) {
var p = document.getElementById( 'p-' + i),
pContent = p.innerHTML,
inputId;
function confirm() {
if (inputId.value.length === 0) {
p.innerHTML = pContent;
alert( "内容不能为空" );
}
else {
update(i, "todo" , inputId.value);
}
}
function enter(e) {
if (e.keyCode == 13){
confirm();
}
}
p.innerHTML = "<input type='text' id='input-" +i+ "' value='" +pContent+ "'>" ;
inputId = document.getElementById( 'input-' +i);
inputId.focus();
inputId.setSelectionRange(0, inputId.value.length);
inputId.onblur = confirm;
inputId.onkeypress = enter;
}
|
Nach dem Login kopieren
Aktualisieren Sie das Attribut („todo“ oder „done“) des entsprechenden Elements im Array todolist und laden Sie
1 2 3 4 5 | function update(i, field, value) {
todolist[i][field] = value;
saveData(todolist);
load();
}
|
Nach dem Login kopieren
Löschen Sie das entsprechende Element und laden Sie
1 2 3 4 5 6 7 | function remove(i) {
todolist.splice(i, 1);
saveData(todolist);
load();
}
|
Nach dem Login kopieren
um die Benutzerdaten zu speichern. Gehen Sie zum lokalen Cache.
1 2 3 | function saveData(data) {
localStorage.setItem( "mytodolist" , JSON.stringify(data));
}
|
Nach dem Login kopieren
Holen Sie sich Daten aus dem lokalen Cache. Wenn Daten vorhanden sind, weisen Sie diese der Aufgabenliste zu, damit die Benutzerdaten nach dem Aktualisieren weiterhin vorhanden sind Seite
1 2 3 4 5 6 7 | function loadData() {
var hisTory = localStorage.getItem( "mytodolist" );
if (hisTory !=null){
return JSON.parse(hisTory);
}
else { return []; }
}
|
Nach dem Login kopieren
Lokalen Cache löschen
1 2 3 4 | function clear() {
localStorage.clear();
load();
}
|
Nach dem Login kopieren
Überwachung einer Reihe von Ereignissen
1 2 3 4 5 6 7 | window.addEventListener( "load" , load);
document.getElementById( "clearbutton" ).onclick = clear;
document.getElementById( "add_list" ).onkeypress = function (event) {
if (event.keyCode === 13){
addTodolist();
}
};
|
Nach dem Login kopieren
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | body {
margin: 0px;
padding: 0px;
font-size: 16px;
background-color: gainsboro;
}
header {
height: 50px;
background-color: cornflowerblue;
}
header section {
margin: 0 auto;
width: 40%;
}
header section label {
float: left;
line-height: 50px;
font-size: 20px;
}
#add_list {
float: right;
margin-top: 11px;
width: 60%;
height: 24px;
border-radius: 5px;
box-shadow: 0 1px 0 black;
font-size: 18px;
text-indent: 10px;
}
h1 {
position: relative;
}
h1 span {
position: absolute;
top: 1px;
right: 5px;
display: inline-block;
width: 23px;
height: 23px;
border-radius: 23px;
line-height: 23px;
font-size: 18px;
text-align: center;
background: #E6E6FA;
}
.content {
width: 40%;
margin: 0 auto;
}
li {
position: relative;
margin-bottom: 10px;
border-radius: 5px;
padding: 0 10px;
height: 32px;
box-shadow: 0 1px 0 black;
line-height: 32px;
background-color: burlywood;
list-style: none;
}
ol li input {
position: absolute;
top: 4px;
left: 10px;
width: 20px;
height: 20px;
cursor: pointer;
}
p{
margin: 0;
}
ol li p {
display: inline;
margin-left: 35px;
}
ol li p input{
top: 5px;
margin-left: 35px;
width: 70%;
height: 14px;
font-size: 14px;
line-height: 14px;
}
ol li a {
position: absolute;
top: 8px;
right: 10px;
display: inline-block;
border: 1px;
border-radius: 50%;
width: 16px;
height: 16px;
font-size: 32px;
line-height: 10px;
color: red;
font-weight: bolder;
cursor: pointer;
background-color: gray;
}
#clear {
width: 100px;
margin: 0 auto;
}
#clearbutton {
border-color: red;
border-radius: 5px;
box-shadow: 0 1px 0 yellow;
cursor: pointer;
}
button h3{
font-size: 13px;
line-height: 13px;
}
|
Nach dem Login kopieren
Die endgültige Implementierung Wirkung

Ich glaube, Sie haben es gesehen. Sie beherrschen die Methode in diesem Artikel. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln zum PHP-Chinesen Webseite!
Empfohlene Lektüre:
React Native verwendet Fetch, um Bilder hochzuladen
Verwenden Sie Import und Require, um JS zu verpacken
Mehrere Möglichkeiten, dies an Reaktionsereignisse zu binden
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der JS-Implementierung von todolist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!