Lekcja 8.6: Przyciski (<button>, <input type="submit/reset/button">)
Interakcja z formularzem: Przyciski
Przyciski są kluczowymi elementami interaktywnymi formularzy, pozwalającymi użytkownikom na wykonywanie akcji, takich jak wysłanie danych, zresetowanie formularza czy uruchomienie niestandardowej funkcji JavaScript.
W HTML przyciski można tworzyć głównie za pomocą znacznika <button> lub znacznika <input> z odpowiednim atrybutem type.
Znacznik <button>
Jest to bardziej nowoczesny i elastyczny sposób tworzenia przycisków. Pozwala na umieszczenie wewnątrz przycisku nie tylko tekstu, ale również innych elementów HTML, takich jak obrazy (<img>) czy znaczniki formatujące (<strong>, <em>).
Kluczowym atrybutem znacznika <button> jest type, który określa jego zachowanie:
type="submit"(domyślny): Przycisk wysyła dane formularza na serwer (na adres podany wactionformularza).type="reset": Przycisk resetuje wszystkie elementy formularza do ich wartości początkowych (zdefiniowanych w HTML lub domyślnych przeglądarki).type="button": Przycisk nie ma domyślnego zachowania. Jest często używany w połączeniu z JavaScriptem do wywoływania niestandardowych akcji po kliknięciu.
Inne atrybuty <button>:
nameivalue: Jeśli przycisktype="submit"ma te atrybuty, jego paraname=valuezostanie wysłana razem z danymi formularza tylko wtedy, gdy to właśnie ten przycisk został użyty do wysłania formularza. Jest to przydatne, gdy mamy kilka przycisków wysyłających w jednym formularzu i chcemy wiedzieć, który został kliknięty.disabled: Wyłącza przycisk, czyniąc go nieklikalnym.
Przykłady użycia <button>:
<form action="/submit" method="post">
<!-- Pole formularza -->
<label for="btn-text">Tekst:</label>
<input type="text" id="btn-text" name="tekst">
<!-- Przycisk wysyłający (domyślny typ to submit) -->
<button>Wyślij (Submit)</button>
<!-- Jawnie zdefiniowany przycisk wysyłający -->
<button type="submit" name="akcja" value="zapisz">Zapisz dane</button>
<!-- Przycisk resetujący -->
<button type="reset">Wyczyść formularz</button>
<!-- Przycisk ogólnego przeznaczenia (dla JavaScript) -->
<button type="button" onclick="alert(\'Kliknięto przycisk!\');">Kliknij mnie</button>
<!-- Przycisk z ikoną (przykład z użyciem tekstu, można wstawić <img>) -->
<button type="submit"> <strong>Zapisz</strong> 💾 <!-- Ikona dyskietki --> </button>
</form>
Znacznik <input> jako przycisk
Tradycyjnie przyciski tworzono również za pomocą znacznika <input> z odpowiednim typem. Jest to mniej elastyczne niż <button>, ponieważ tekst na przycisku definiuje się za pomocą atrybutu value i nie można w nim umieszczać innych elementów HTML.
<input type="submit" value="Wyślij">: Tworzy przycisk wysyłający formularz. Tekst na przycisku pochodzi z atrybutuvalue.<input type="reset" value="Resetuj">: Tworzy przycisk resetujący formularz. Tekst na przycisku pochodzi z atrybutuvalue.<input type="button" value="Kliknij">: Tworzy przycisk ogólnego przeznaczenia, bez domyślnej akcji, do użytku z JavaScriptem. Tekst na przycisku pochodzi z atrybutuvalue.<input type="image" src="obrazek.png" alt="Wyślij">: Specjalny typ przycisku wysyłającego, który wyświetla obrazek zamiast standardowego przycisku. Po kliknięciu, oprócz danych formularza, wysyła również współrzędne (x, y) kliknięcia na obrazku.
Przykłady użycia <input> jako przycisków:
<form action="/submit" method="post">
<input type="submit" value="Wyślij formularz">
<input type="reset" value="Wyczyść">
<input type="button" value="Akcja JS" onclick="alert(\'Akcja!\');">
<input type="image" src="https://via.placeholder.com/80x30.png?text=Wyślij" alt="Wyślij formularz obrazkiem">
</form>
<button> vs <input> - Co wybrać?
W nowoczesnym tworzeniu stron preferowane jest używanie znacznika <button> ze względu na jego większą elastyczność:
- Możliwość umieszczania złożonej zawartości HTML wewnątrz przycisku (tekst, ikony, formatowanie).
- Lepsze możliwości stylizacji za pomocą CSS.
- Bardziej spójne zachowanie w różnych przeglądarkach (choć różnice dla
<input>są obecnie minimalne).
Znacznik <input type="..."> jest nadal w pełni poprawny i funkcjonalny, ale <button> oferuje więcej możliwości.
Zadanie praktyczne (z rozwiązaniem)
Zadanie: W formularzu kontaktowym, który tworzyliśmy, zastąp istniejący przycisk <button type="submit"> dwoma przyciskami:
- Przycisk
<button type="submit">z tekstem "Wyślij wiadomość". - Przycisk
<button type="reset">z tekstem "Wyczyść formularz".
Rozwiązanie:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Formularz Kontaktowy - Przyciski</title>
<style>
/* Style z poprzednich lekcji */
label { display: block; margin-top: 10px; }
input[type="text"], input[type="password"], textarea, select { width: 90%; max-width: 300px; padding: 8px; margin-top: 5px; border: 1px solid #ccc; }
button, input[type="submit"], input[type="reset"], input[type="button"] { margin-top: 15px; padding: 10px 15px; margin-right: 10px; cursor: pointer; }
fieldset { border: 1px dashed #aaa; padding: 15px; margin-bottom: 20px; }
legend { font-weight: bold; color: navy; padding: 0 5px; }
fieldset div { margin-bottom: 8px; }
input[type="radio"], input[type="checkbox"] { margin-right: 5px; }
fieldset > div > label { display: block; margin-top: 10px; }
fieldset > div > input + label { display: inline-block; margin-top: 0; }
</style>
</head>
<body>
<h1>Kontakt</h1>
<form action="/wyslij-wiadomosc" method="POST">
<fieldset>
<legend>Dane wiadomości</legend>
<div>
<label for="contact-imie">Imię:</label>
<input type="text" id="contact-imie" name="imie_uzytkownika" required>
</div>
<div>
<label for="contact-dzial">Dział:</label>
<select id="contact-dzial" name="dzial" required>
<option value="">-- Wybierz dział --</option>
<option value="sprzedaz">Sprzedaż</option>
<option value="pomoc">Pomoc techniczna</option>
<option value="reklamacje">Reklamacje</option>
<option value="inne">Inne</option>
</select>
</div>
<div>
<label for="contact-wiadomosc">Wiadomość:</label>
<textarea id="contact-wiadomosc" name="tresc_wiadomosci" rows="4" required></textarea>
</div>
</fieldset>
<!-- Dodane/zmienione przyciski -->
<button type="submit">Wyślij wiadomość</button>
<button type="reset">Wyczyść formularz</button>
</form>
</body>
</html>
Dodatkowe zadania do samodzielnego wykonania:
- Zastąp przyciski
<button>w powyższym rozwiązaniu ich odpowiednikami<input>(type="submit"itype="reset"). - Dodaj trzeci przycisk
<button type="button">o nazwie "Pomoc", który po kliknięciu wyświetli alert JavaScript z tekstem "Skontaktuj się z nami pod numerem...". - Dodaj atrybuty
name="submit_type"ivalue="send"do przycisku wysyłającego i sprawdź (np. w narzędziach deweloperskich), czy ta para jest wysyłana razem z formularzem.
Najczęściej zadawane pytania
Jakie są typy przycisków w HTML?
Główne typy to: submit (wysyła formularz - domyślny dla <button>), reset (resetuje formularz) i button (przycisk ogólnego przeznaczenia, bez domyślnej akcji, dla JavaScript).
Czym różni się <button> od <input type="submit">?
Znacznik <button> jest bardziej elastyczny - pozwala umieścić wewnątrz tekst, obrazy i inne elementy HTML. W <input> tekst przycisku jest definiowany przez atrybut value. Generalnie preferuje się <button>.
Do czego służy przycisk type="reset"?
Przycisk <button type="reset"> lub <input type="reset"> przywraca wszystkie pola formularza do ich wartości początkowych (zdefiniowanych w HTML lub domyślnych przeglądarki).
Do czego służy przycisk type="button"?
Przycisk <button type="button"> lub <input type="button"> nie wykonuje żadnej domyślnej akcji związanej z formularzem. Jest używany do wywoływania niestandardowych funkcji JavaScript po kliknięciu.
Czy przycisk wysyłający może mieć atrybuty name i value?
Tak, jeśli przycisk <button type="submit"> lub <input type="submit"> ma atrybuty name i value, ta para name=value jest wysyłana razem z danymi formularza, ale tylko jeśli to ten konkretny przycisk został użyty do wysłania.