Emre

WFN Üye
Konular
1,662
Mesajlar
1,758
Çözüm
0
Ticaret Puanı
0
Üyelik
9 Ay 4 Gün
Konum
Samsun
Web Sitesi
Var
Alanı
WordPress Uzm.
1/1
Konu sahibi
Form gönderildiğinde tarayıcı varsayılan olarak sayfayı yeniden yükler. Bunu engellemek için formun submit olayını dinleyip olay nesnesi üzerindeki preventDefault() yöntemini çağırmalısınız. Böylece form verilerini JavaScript ile doğrulayabilir, sunucuya fetch() ile gönderebilir veya yalnızca sayfa yenilenmeden işlem yapabilirsiniz.

Form gönderimini durdurma​


Aşağıdaki örnekte submit olayı forma bağlanır. Kullanıcı gönderme düğmesine bastığında ya da Enter tuşunu kullandığında olay çalışır ve event.preventDefault() tarayıcının normal gönderme davranışını iptal eder.

HTML:
<form id="contactForm">
    <input id="name" name="name" type="text" placeholder="Adınız" required>
    <button type="submit">Gönder</button>
</form>

<p id="message"></p>

<script>
    const form = document.querySelector('#contactForm');
    const message = document.querySelector('#message');

    form.addEventListener('submit', function (event) {
        event.preventDefault();

        const name = form.elements.name.value.trim();
        message.textContent = `${name} adlı kullanıcı için işlem tamamlandı.`;
    });
</script>

Bu kodu HTML dosyanızdaki formun bulunduğu yere ekleyip sayfayı açın. Ad alanını doldurduktan sonra Gönder düğmesine bastığınızda sayfa yenilenmez; paragrafta işlem sonucunu belirten mesaj görünür. Formun submit olayını dinlemek, yalnızca düğmenin click olayını dinlemekten daha doğrudur. Çünkü kullanıcı formu Enter tuşuyla da gönderebilir.

Form verisini sayfa yenilenmeden sunucuya göndermek​


Formun yalnızca yenilenmesini engellemek yeterli değilse, preventDefault() çağrısından sonra form verilerini fetch() ile sunucuya gönderebilirsiniz. FormData, formdaki name özniteliğine sahip alanları otomatik olarak toplar.

HTML:
<form id="loginForm">
    <input name="email" type="email" required>
    <input name="password" type="password" required>
    <button type="submit">Giriş yap</button>
</form>

<p id="result"></p>

<script>
    const loginForm = document.querySelector('#loginForm');
    const result = document.querySelector('#result');

    loginForm.addEventListener('submit', async function (event) {
        event.preventDefault();

        const formData = new FormData(loginForm);
        result.textContent = 'Gönderiliyor...';

        try {
            const response = await fetch('/api/login', {
                method: 'POST',
                body: formData
            });

            if (!response.ok) {
                throw new Error(`İstek başarısız oldu: ${response.status}`);
            }

            result.textContent = 'İşlem başarıyla tamamlandı.';
        } catch (error) {
            result.textContent = 'İşlem sırasında bir hata oluştu.';
            console.error(error);
        }
    });
</script>

Buradaki /api/login adresi varsayımsal bir sunucu uç noktasıdır; kendi back-end adresinizle değiştirilmelidir. Sunucu POST isteğini kabul etmiyorsa veya farklı bir veri biçimi bekliyorsa, sayfanın yenilenmemesi yine gerçekleşir ancak istek başarısız olur. Bu iki durum birbirinden farklıdır: sayfanın yenilenmemesi, sunucu işleminin başarıyla tamamlandığını kanıtlamaz.

İsteğin sonucunu response.ok, HTTP durum kodu ve sunucunun döndürdüğü içerikle değerlendirin. Başarılı yanıt alındığında başarı mesajı gösterebilir, formu temizleyebilir veya başka bir sayfaya yönlendirebilirsiniz. Hata durumunda ise kullanıcıya genel bir hata mesajı verip teknik ayrıntıyı geliştirici araçlarının konsolunda inceleyebilirsiniz.

Yaygın hatalar ve kontrol edilmesi gerekenler​


Sayfa hâlâ yenileniyorsa önce olay dinleyicisinin gerçekten forma bağlandığını kontrol edin. querySelector() sonucunun null olmaması gerekir; JavaScript kodu form HTML’i oluşturulmadan önce çalışıyorsa kodu sayfanın sonunda çalıştırın veya DOMContentLoaded olayını bekleyin.

JavaScript:
document.addEventListener('DOMContentLoaded', function () {
    const form = document.querySelector('#contactForm');

    form.addEventListener('submit', function (event) {
        event.preventDefault();
        console.log('Varsayılan form gönderimi engellendi.');
    });
});

Konsolda bu mesaj görünüyorsa olay dinleyicisi çalışıyor demektir. Mesaj görünmüyorsa formun id değeri, JavaScript seçicisi veya scriptin yüklenme sırası kontrol edilmelidir. Ayrıca preventDefault() çağrısının submit işleyicisinin içinde ve form gönderilmeden önce çalıştığından emin olun.

Tarayıcının yerleşik required, type="email" gibi doğrulamalarını kullanıyorsanız, geçersiz alanlarda submit olayı çalışmayabilir. Bu durumda önce alanın neden geçersiz olduğunu düzeltin. Özel doğrulama yapmanız gerekiyorsa alan değerlerini kontrol edin; hata varsa kullanıcıya mesaj gösterip sunucu isteğini başlatmayın. Ancak istemci tarafındaki doğrulama tek başına güvenlik mekanizması değildir; sunucu gelen veriyi ayrıca doğrulamalıdır.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic