classList.hinzufügen Funktioniert Nicht
Ich versuche eine einfache to-do-Liste, was mit JavaScript. Im Grunde, Sie eine Position eingeben, um das Eingabefeld, wird es der Liste Hinzugefügt haben, klicken Sie auf es, wenn es fertig ist, dann wird es überschritten. Wenn Sie auf eine Liste, die bereits Durchgestrichen, entfernt die Linie. Aber beim entfernen einer Zeile funktioniert, indem eine Linie durch, funktioniert nicht.
HTML:
<div><input type="text" value="" id="new_task"><button id="add_task">Add Task</button></div>
<ul id="tasks">
<li class="completed selected">One Task</li>
<li>Two Task</li>
</ul>
CSS:
<style type="text/css" media="screen">
/*local styles if any (quick tests and local only overrides)*/
#tasks li{
list-style: none;
}
#tasks .selected{
list-style: disc;
}
.completed{
text-decoration: line-through;
}
</style>
JavaScript:
<script type="text/javascript" charset="utf-8">
var inputField = document.querySelector("#new_task");
var myButton = document.querySelector("#add_task");
var taskList = document.querySelector("#tasks");
var newList = document.createElement("li");
var completeTask = document.querySelector("li.completed.selected");
var incompleteTask = document.querySelector("li:not([class])");
myButton.onclick = function() {
taskList.appendChild(newList);
newList.innerHTML = inputField.value;
inputField.value = "";
}
completeTask.onclick = function() {
event.target.classList.remove("completed","selected");
}
incompleteTask.onclick = function() {
event.target.classList.add("completed","selected");
}
</script>
classList
ist nicht von IE9 unterstützt und niedriger. Ich nehme an, es ist nicht das, was Sie verwenden? Denn dasevent
keyword sieht verdächtig aus...- Was Sie brauchen, aufrufen von Funktionen, die durch Elemente " - Klasse ist event delegation. Oder Sie können die event-Handler überprüfen Sie die element-Klasse und machen Sie die entsprechende Aufgabe.
- Könnten Sie das näher auszuführen? Vor allem der zweite Satz. Ich würde es zu schätzen wissen.
- Überprüfen Sie
incompleteTask
ist tatsächlich verweisen auf die Elemente, die Sie glauben, dass es funktioniert. Es ist möglich, dass Sie die Selektion vor dem DOM geladen wurde.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Skript analysiert das Dokument nur einmal
document.querySelector("li.completed.selected")
gibt einen Knoten. Daher, entfernen Sie diese Klassen funktioniert nur auf der Eine Aufgabe was hat diese Klassen durch die Zeit, die das script geparst wird.müssen Sie
onclick
handler manuell zu jedem Artikel erstellt, siehe jsFiddle.querySelector
gibt eine einzelne DOM element.Können Sie einfach die
toggle
Methode derclassList
tauschen sich die Klassen, die Sieli
s. Wählen Sie einfach alle Ihreli
und Ihre click-event-handler eine Funktion, die schaltet den Klassen.http://jsfiddle.net/RXH69/