Okno dialogowe prompt i atrybut onclick | Dodajemy zadanie za pomocą przycisku i okna dialogowego prompt


Mimo że nasze zadania wyświetlają się i aktualizują już nie tylko w konsoli, ale także w przeglądarce, nadal musimy nimi zarządzać z poziomu konsoli za pomocą ręcznie wpisywanych stworzonych przez nas funkcji...

Jest to niewygodne, ale także uniemożliwia zwykłym nieprogramującym użytkownikom korzystanie z naszej aplikacji.

Dlatego naszym kolejnym krokiem jest zmodyfikowanie funkcji addTask() w taki sposób, aby otwierała wbudowane okno dialogowe przeglądarki prompt, w którym użytkownik może wpisać swoje zadanie i kliknąć Enter, natomiast funkcja ta będzie wywoływana przez kliknięcie przycisku "dodaj zadanie".

prompt()

Najpierw sprawdźmy, czym jest wbudowana funkcja prompt(). Wpisz w konsoli prompt(), kliknij Enter i zobacz, co się stało. Na górze przeglądarki otworzyło się nowe okno z polem do wprowadzania treści.

Jeśli coś tam wpiszesz, a potem klikniesz Enter lub przycisk OK, w konsoli zostanie zwrócona treść, którą wpisałeś/aś, w postaci ciągu tekstowego (string)! Jeśli z kolei klikniesz przycisk Anuluj/ Cancel lub też Esc na klawiaturze, funkcja zwróci null, czyli brak treści.

Mamy teraz wygodne wbudowane narzędzie do pobierania danych od użytkownika, które może nam zastąpić klasyczny formularz (oraz konieczność wklepywania tej treści ręcznie w funkcji addTask() w konsoli). Owszem, w poważnych aplikacjach korzystamy z formularzy, aczkolwiek na razie wystarczy nam takie działające rozwiązanie. Rozbudujmy teraz funkcję addTask(), dodając tę funkcjonalność:

// usuń argument newTask z nawiasów funkcji,
// ponieważ nie będziemy już go wprowadzać ręcznie:
function addTask() {
  // deklarujemy zmienną newTask, używając const, ponieważ nie będziemy jej modyfikować,
  // która przyjmuje wartość zwracaną przez wbudowaną funkcję prompt(),
  // która to wartość jest tym, co wpisze użytkownik w oknie:
  const newTask = prompt("Wpisz nowe zadanie:");

  // reszta kodu pozostaje bez zmian:
  tasks.push(newTask);

  updateTasksInLocalStorage();

  console.log("Do Twoich zadań zostało dodane nowe zadanie:", newTask);

  renderTasks();
}

Tak! Teraz możemy doświadczyć namiastki prawdziwej aplikacji! Co ciekawe, to okienko jest także dostępne na telefonach, w związku z czym, gdybyśmy opublikowali naszą aplikację jako prawdziwą stronę w internecie (a mogę Cię tego nauczyć), a potem otworzylibyśmy ją w przeglądarce na telefonie, to zadziała tak samo.

atrybut HTML onclick

Musimy teraz dopisać dosłownie kilka znaków w naszym kodzie HTML, by wywołać funkcję addTask() poprzez kliknięcie przycisku Dodaj zadanie. W związku z tym otwórz plik todo-app.html w notatniku i uzupełnij tylko jedną linijkę zawierającą <button>dodaj zadanie</button> o następujący kod:

<!-- poprzedni kod HTML -->

<button onclick="addTask()">dodaj zadanie</button>

<!-- kolejny kod HTML -->

Do znacznika <button>, ale także wielu innych znaczników, można dodać atrybut onclick, do którego można przypisać funkcję, która ma być wywołana po kliknięciu w przycisk. Nie jest to najlepszy sposób na dodawanie funkcjonalności do HTMLa, ale nam na razie wystarczy.

Zapisz teraz plik todo-app.html (Ctrl+S), odśwież przeglądarkę, uruchom plik todo-app-dom z poziomu konsoli (zakładka snippets) => Ctrl+Enter lub klikając ikonkę trójkąta, a teraz spróbuj kliknąć w przycisk "Dodaj zadanie".

Jeśli wszystko zrobiłeś/aś dobrze, to w odpowiedzi na kliknięcie przycisku otworzyło się okno dialogowe, możesz wpisać treść zadania, a zostanie ono dodane do localStorage i wyświetli się w przeglądarce!

Nasza aplikacja jest coraz bardziej interaktywna!