Menu

HTML Form: Alanlar, action, method, fieldset ve Doğrulama

HTML'de form oluşturma: form elementi, name özellikleri, action ve method (GET ve POST), fieldset ve legend ile gruplama, required ve pattern ile yerleşik doğrulama ve gönderimi JavaScript ile işleme.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

HTML'de form nasıl yapılır

Form, alanları ve bir gönder butonunu içeren bir <form> elementidir. Her alanın bir name değerine ihtiyacı vardır: değer bu anahtarla gönderilir. Formu doldur ve Send'e bas. Önizleme hiçbir yere bir şey göndermez; tarayıcının tam olarak neyi göndereceğini gösterir.

Parçalar:

  • action verinin gittiği URL, method de nasıl gittiğidir (burada post).
  • Her alanda name. Değeri, okurun yazdığı şeydir.
  • <label> her alanı ekranda ve ekran okuyucular için adlandırır (bkz. HTML label).
  • required ve type="email", tarayıcının göndermeden önce alanları kontrol etmesini sağlar. Adı boş bırakarak ya da e-posta olarak abc yazarak göndermeyi dene.
  • Gönder butonu formu gönderir. Bir metin alanında Enter'a basmak da gönderir.

action ve method: veri nereye ve nasıl gider

ÖzellikDeğerlerVarsayılan
actionHerhangi bir URLGeçerli sayfanın URL'si
methodget, post, dialogget
enctypeapplication/x-www-form-urlencoded, multipart/form-data, text/plainapplication/x-www-form-urlencoded

method="get" ile alanlar URL'nin sorgu dizesi olur: name="q" olan bir arama formu /search?q=blue+shoes adresine gider. Bu, aramalar ve filtreler için doğrudur, çünkü sonuç yer imlerine eklenebilir ve paylaşılabilir. method="post" ile alanlar isteğin gövdesine girer ve adres çubuğunda ya da geçmişte görünmez. Giriş yapan, bir şey oluşturan, değiştiren ya da silen her şey için ve şifreler için POST kullan.

Dosya yüklemesi (<input type="file">) olan bir formun method="post" ve enctype="multipart/form-data" değerlerine ihtiyacı vardır, yoksa yalnızca dosyanın adı gönderilir. method="dialog" bir <dialog> içindeki form içindir: gönderim bir istek yollamak yerine diyaloğu kapatır.

Neler gönderilir

Yalnızca name değeri olan alanlar ve yalnızca disabled değillerse gönderilir. Submit'e bas ve alanları formun gönderdikleriyle karşılaştır:

Form city, zip, source ve action gönderir. Adı olmayan alan, devre dışı alan ve işaretlenmemiş checkbox dışarıda kalır. Gizli input'lar gönderilir ama asla gösterilmez; gönder butonu da kullanılan buton olduğu için kendi name ve value değerlerini gönderir.

fieldset ve legend ile alanları gruplamak

<fieldset> ilgili alanların çevresine bir kutu çizer, <legend> de onun başlığıdır. Odak gruba girdiğinde ekran okuyucular legend'ı duyurur; aşağıdakiler gibi bir radio buton setini anlaşılır kılan da budur: "Delivery, Standard, radio button".

Bir fieldset üzerindeki disabled içindeki her alanı bir kerede devre dışı bırakır ve hiçbiri gönderilmez. Onu kaldır, hediye alanları kullanılabilir hâle gelir.

Yerleşik doğrulama: required, pattern ve diğerleri

Tarayıcılar göndermeden önce bu özellikleri kontrol eder ve başarısız olan ilk alanda bir mesaj gösterir:

ÖzellikKontrol eder
requiredAlan boş değil (checkbox işaretli)
type="email", type="url"Değer bir e-posta adresine ya da URL'ye benziyor
minlength, maxlengthMetin uzunluğu
min, max, stepSayı ve tarih aralığı
patternDeğerin tamamı bir düzenli ifadeyle eşleşiyor

:invalid ve :valid alanlara durumlarına göre stil verir. :user-invalid genellikle daha iyidir: yalnızca okur alanı değiştirip ilerledikten ya da göndermeyi denedikten sonra uygulanır, böylece boş bir form kıpkırmızı açılmaz.

pattern ile ilgili üç şey insanları yanıltır. Değerin tamamıyla eşleşmelidir (^ ya da $ gerekmez). Yalnızca alan boş değilken çalışır, bu yüzden onu required ile birlikte kullan. Tarayıcının hata mesajı da geneldir, bu yüzden biçimi alanın yanında görünür bir metinle anlat. Chrome ve Firefox title metnini mesajlarına ekler, ama gözden kaçması kolaydır.

Kontrolleri kapatmak için, örneğin sunucunun doğrulamasını test ederken, <form> elementine novalidate ekle. Tek bir gönder butonu da formnovalidate ile onları atlayabilir.

Tarayıcı doğrulaması okurun rahatlığı içindir. Herkes sayfayı düzenleyebilir ya da onsuz bir istek gönderebilir, bu yüzden sunucu her değeri yeniden kontrol etmelidir.

setCustomValidity ile özel mesajlar

Bir kural, örneğin "iki şifre eşleşmeli", bir özellik olarak yazılamıyorsa mesajı JavaScript ile ayarla. Boş olmayan özel bir mesajı olan alan geçersizdir; boş bir string onu yeniden geçerli yapar:

Tekrar alanının name değeri yoktur, bu yüzden şifrenin yalnızca bir kopyası gönderilir.

Gönderimi JavaScript ile işlemek

Formu sayfadan ayrılmadan göndermek için submit olayını dinle, preventDefault() çağır ve alanları FormData ile oku. Bir butonun click olayı yerine submit dinlemek, Enter dahil her gönderme yolunu yakalar ve yalnızca yerleşik doğrulama geçtikten sonra çalışır:

Object.fromEntries(new FormData(form)) alanları düz bir nesneye çevirir. Birkaç değeri olabilen alanlar için (aynı adı paylaşan checkbox'lar, çoklu bir select) onun yerine formData.getAll('name') kullan, çünkü nesne yalnızca son değeri tutar.

Sık yapılan hatalar

  • name olmayan alanlar. Gönderilen veriden sessizce çıkarılırlar.
  • Label yerine placeholder. Okur yazmaya başladığı anda ipucu kaybolur. Bir <label> kullan.
  • Gönderme dışında bir şey için kullanılan, type değeri olmayan bir <button>. Bir formun içinde o bir gönder butonudur.
  • Form içinde form. Formları iç içe yazmak geçersizdir; tarayıcı içteki <form> etiketini yok sayar.
  • Formdaki submit yerine gönder butonundaki click olayını dinlemek. Enter tuşuyla yapılan gönderimler kaçırılır.
  • Sunucu tarafında tarayıcı doğrulamasına güvenmek. Orada yeniden doğrula.
  • Şifreler için GET. URL'ye, geçmişe ve sunucu loglarına düşerler.

Sıkça Sorulan Sorular

HTML'de form nasıl oluşturulur?

Alanları <form action="/signup" method="post"> ile sar, her alana bir name ve bir <label> ver ve <button type="submit"> ile bitir. Form gönderildiğinde tarayıcı her name=value çiftini action URL'sine gönderir.

Bir formda GET ile POST arasındaki fark nedir?

method="get" (varsayılan) alanları /search?q=shoes gibi URL'ye koyar; bu da yer imlerine eklenebilmesi gereken aramalar ve filtreler için uygundur. method="post" onları isteğin gövdesinde gönderir; girişler, kayıtlar ve veriyi değiştiren her şey için istediğin budur.

Form alanım neden gönderilmiyor?

Bir name özelliği yoktur ya da disabled durumundadır. Yalnızca adı olan, etkin alanlar gönderilir. İşaretlenmemiş bir checkbox ya da radio buton da tamamen dışarıda bırakılır.

fieldset ve legend ne için kullanılır?

<fieldset> ilgili alanları gruplar, <legend> de grubun başlığıdır. Odak gruba girdiğinde ekran okuyucular legend'ı duyurur; bir radio buton grubunu anlaşılır kılan budur. Bir fieldset üzerindeki disabled de içindeki her alanı devre dışı bırakır.

Bir formu JavaScript olmadan HTML ile nasıl doğrularım?

Özellikleri kullan: required, type="email", minlength, maxlength, min, max ve pattern. Tarayıcı gönderimi engeller ve ilk geçersiz alan için bir mesaj gösterir. Sunucuda da her zaman doğrula, çünkü bu kontroller okurun tarayıcısında çalışır ve atlatılabilir.

Bir formun sayfayı yeniden yüklemesini nasıl engellerim?

Formun submit olayını dinle ve event.preventDefault() çağır, sonra veriyi fetch ile kendin gönder: form.addEventListener('submit', (e) => { e.preventDefault(); fetch(form.action, { method: 'POST', body: new FormData(form) }); }).

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA