SORU
13 Mayıs 2010, PERŞEMBE


JQuery formları çift gönderme önlemek

Sunucu işlemek için biraz zaman alır bir form var. Kullanıcı bekler emin olun ve tekrar düğmesine tıklayarak formu yeniden denemez. Aşağıdaki jQuery kodu kullanarak çalıştı:

<script type="text/javascript">
$(document).ready(function() {
    $("form#my_form").submit(function() {
        $('input').attr('disabled', 'disabled');
        $('a').attr('disabled', 'disabled');
        return true;
    });
});
</script>

Firefox bu çalıştığımda her şeyi devre dışı alır ama form vardır gerekiyordu POST veri ile teslim edilir. Kullanamıyorum bir WordPress kullanmak için formu gönderin çünkü ihtiyacım olan düğme için gönderilen form ile orada birden fazla gönderme düğmeleri ve ben belirleyen kullanılmış olan bir değeri yer alan YAZI. Form genellikle ve bu olduktan sonra her şeyi doğru devre dışı bırakmak için ihtiyaç olarak teslim edilmesi gerekiyor.

Teşekkürler!

CEVAP
17 Aralık 2010, Cuma


Senin sorunun bu hat olduğunu düşünüyorum

$('input').attr('disabled','disabled');

TÜM girişleri, sanırım, formu göndermek gerekiyordu olanlar da dahil olmak üzere devre dışı bırakıyorsun.

Sadece devre dışı bırakmak için Gönder düğmesi(ler)olabilirbunu yapmak için:

$('button[type=submit], input[type=submit]').attr('disabled',true);

Ancak, IE bile bu düğmeleri devre dışı bırakılır eğer formu göndermek olacağını sanmıyorum. Farklı bir yaklaşım öneriyorum.

JQuery eklentisi çözmek için

Biz sadece aşağıdaki kod ile bu sorun çözüldü. Hile burada bir WordPress kullanmak data() çoktan teslim formu işaretlemek için kullanıyor. Bu şekilde, ucubeler YANİ çıkan karmaşa ile düğmeleri gönder, gerek yok.

// jQuery plugin to prevent double submission of forms
jQuery.fn.preventDoubleSubmission = function() {
  $(this).on('submit',function(e){
    var $form = $(this);

    if ($form.data('submitted') === true) {
      // Previously submitted - don't submit again
      e.preventDefault();
    } else {
      // Mark it so that the next submit can be ignored
      $form.data('submitted', true);
    }
  });

  // Keep chainability
  return this;
};

Bu gibi kullanabilirsiniz:

$('form').preventDoubleSubmission();

Eğer varsa orada AJAX formlargerekirsayfa yük başına birden çok kez göndermek için izin, onları bir sınıf olduğunu belirten verin, böyle seçici onları dışlayabilirsiniz:

$('form:not(.js-allow-double-submission)').preventDoubleSubmission();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Air_Fooj

    Air_Fooj

    24 NİSAN 2009
  • Fuse

    Fuse

    21 Kasım 2005
  • PhoneBuff

    PhoneBuff

    10 HAZİRAN 2011