v2.5.2
Giriş yap

Ard Arda İstek Gönderilen Ajax'ta Problem

demo
588 defa görüntülendi

Form'un her change eventi için bir ajax çağırıyorum. Ajaxtan dönen verinin durumuna göre Form'daki "SUBMIT" butonunu ya .hide() ile gizliyorum, ya da .show() ile gösteriyorum.

Ancak bazen şöyle bir senaryo gerçekleşiyor; Örneğin checkbox'a hızlı hızlı basıldığında, selectbox'taki verileri hızlı hızlı değiştirildiğinde kod parçası sapıtıyor.

Örneğin: kullanıcı olması gereken "A durumu" şeklinde formu doldurduktan ve Submit.show() olduktan hemen sonra; Hatalı olan "B durumu" şeklinde formu değiştirdiği zaman buton hala .Show() olarak kalmış oluyor...

Örnek kodları şu şekilde gösterebilirim:

$("#form").on('change', function (e) {
$("#btnSubmit").hide();
if (mevcutDurum > hedeflenenDurum) {
    $("#bilgi").text("Hedeflenen durum, mevcut durumdan alçak olamaz!");
    $("#bilgilendirme").show();
    $("#btnSubmit").hide();
    }
}
else {
    let form = $(this);
    $.ajax({
        type: "POST",
        url: url,
        data: form.serialize(),
        beforeSend: function () {
            $("#btnSubmit").hide();
        },
        success: function (data) {
            $("#btnSubmit").show();
        },
    });
}

Özetle: Form kurallara uygunsa Submit.show(), hatalıysa Bilgilendirme yazısı gösterilip Submit.hide() olmalıyken;
Hem uyarı görünüyor, hem de buton Submit olarak kalmış oluyor...

Görseli inceleyiniz:

Nasıl çözebilirim bunu?

demo
1071 gün önce

@kargasal1982 aslında söylediğin mantığa benzer olarak zaten:
1- form.change event'i tetiklendiği anda butonu hide yapıyorum,
2- ajax beforeSend kısmında yine butonu .hide yapıyorum

butonu sadece ajax'ın success function'ı tetiklendiği anda .show ediyorum...

Senin bahsettiğin senaryoyu uygularsam; buton'da olduğu gibi yine bir önceki ajax ile çakışma olacak. Mesela: Hem buton.show() olmuş olacak, hem de loader.show() gibi...