v2.5.2
Giriş yap

Ajax ile formu post ettikten ve load ile anı sayfayı yeniden yükledikten sonra butonların çalışmaması

ozermert26
939 defa görüntülendi

Merhaba arkadaşlar. Ajax ile form post edildikten ve sayfa load() ile yeniden yüklendikten sonra hiçbir buton, tıklandığında yapması gerekeni yapmıyor, ta ki sayfa yenilenene kadar. Aşağıdaki koda bakın:

kod

(adsbygoogle = window.adsbygoogle || []).push({});
<form method="POST" id="yorumFormu">
<label for="yorum">Yorumunuz: <textarea name="yorum" id="yorum" cols="60" rows="20" aria-label="Yorumunuz"></textarea></label>
<button type="button" id="yorumGonder">Yorumu gönder</button>
</form>
<script>
$("#yorumGonder").on("click",function(){
$.post("yorum-ekle.php",$("#yorumFormu").serialize(),function(basarili){
alert(basarili);
setTimeout(() => {
 $("body").load(window.location.href);
}, 1000);
});
});
</script>

Sevgiler

Cevap yaz
Cevaplar (15)
kartal
1188 gün önce
    /*
    önce olay dinleyicilerinin parent elementini tanımla
        bu şu demek bu elementin içinde olan olay dinleyicilerine 
        bir şekilde yenisi eklenirse yada benzer bir değişiklik yapılırsa
        yeni gelen elementte tanımlı click yada başka olay dinlemesini uygula
    */
    const parent = document.getElementById("form1"); //bu durumda form olsun bir div de olabilir
    //diyelim ki içinde ki check box yada submit işlemleri için olay dinleyicimiz var.
    parent.addEventListener("click", ajaxFunction);
    function ajaxFunction(e){
        //
        if(e.target && e.target.matches("yorum_gonder")){ //submit elementine ait id sınıf ta olabilir
            javascript ajax işlemleri
        }
    }
    
    /*
    aslında bu örnekte buna gerek yok ama diyelim ki dinamik olarak yorumları 10 ar 10 ar
    sayfaya çağırıyorsunuz yorum elementlerinin içinde beğen diye bir click var yani bir olay dinleyicimiz var demek.
    Sayfaya sonradan içinde olay eventi olan element eklendğinde bunu innerHTML ile yaptığınızda içine yazdığınız o elemente ait bütün olay dinleyicileri yok olur.
    Bunun önüne yukarıda ki gibi geçilebilir.
    Başka çözüm yolları da yeşillendiren olursa yazsın.
ozermert26
1189 gün önce

@fatihozpolat
Ama sizin yazdığınız sayfayı yeniliyor. Ben load() gibi sayfa yenilenmeden içeriği değiştiren bir şey istiyorum.

fatihozpolat
1191 gün önce

$("body").load(window.location.href);
bu satırı
location.reload();
ile değiştirin.

ozermert26
1191 gün önce

@abdullahx Dediğinin ne işe yaradığını anladım da böyle bir şey yapmanın sitem açısından doğru olacağını sanmıyorum. Çünkü ben anlık bir çözüm değil, load işleminden sonra tüm butonları çalıştırabilecek bir çözüm istiyorum. Bootstrap kullanmasaydım, tüm butonların onclick olaylarını düzeltirdim fakat bu mümkün değil.

ozermert26
1191 gün önce

@abdullahx Bunu araştıracağım çünkü bilmiyorum nasıl yapılacağını. Eğer anlayamazsam sorabilirim. Teşekkürler @abdullahx

ozermert26
1191 gün önce

@korayozdemir4 Bunun çalışabileceğini anlatan bir yorumu stack overflow'da da gördüm. Fakat bunu sadece kendi .js kodlarım için yapabilirim. Bootstrap yardımıyla oluşturduğum dropdown butonlarının onclick olaylarını nasıl belirleyeceğim?

korayozdemir4
1191 gün önce

$(document).on("click", "#yorumGonder", function () {} olarak dener misiniz?

abdullahx
1192 gün önce

Evet bir fikrim daha var, gönderdiğiniz yorumu append veya prepend metodları ile ekleyin.

ozermert26
1192 gün önce

Gençler çok araştırdım çözümü buldum. Sayfa yenilendikten sonra click olayını yeniden yapmamız gerekiyormuş. Fakat ben bootstrap falan da kullanıyorum, o butonların onclick olayını nasıl yeniden yaparım hiç bilmiyorum.

ozermert26
1192 gün önce

@hakankorkz Bir örnek verebilir misin? Tam olarak anlayamadım.

hakankorkz
1192 gün önce

document.body belirtiniz sayfada muhtemelen çözülecektir..

ozermert26
1192 gün önce

Başka bir yerde test ettim ve load() fonksiyonu çalıştırıldıktan sonra sayfanın hiçbir yerine tıklama yapılamadığını gördüm. Fikri olan var mı?

ozermert26
1192 gün önce

@abdullahx Başka bir fikrin var mı?

ozermert26
1192 gün önce

@abdullahx
Load işlemini ben gönderilen yorum gözüksün diye yapıyorum, formu resetlemek istesem load kullanmam.

abdullahx
1192 gün önce

load kullanmayın, gereksiz bir işlem. Trigger ile formu resetleyin yeterli