Kurs HTML

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:

Inne atrybuty <button>:

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.

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ść:

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:

  1. Przycisk <button type="submit"> z tekstem "Wyślij wiadomość".
  2. 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:

  1. Zastąp przyciski <button> w powyższym rozwiązaniu ich odpowiednikami <input> (type="submit" i type="reset").
  2. 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...".
  3. Dodaj atrybuty name="submit_type" i value="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.