Formda Varsayılanları Önle jQuery Gönder


138

Bunun nesi var?

HTML:

<form action="http://localhost:8888/bevbros/index.php/test" method="post" accept-charset="utf-8" id="cpa-form" class="forms">        
      <input type="text" name="zip" value="Zip code" id="Zip" class="required valid">      
      <input type="submit" name="Next" value="Submit" class="forms" id="1">
  </form>

jQuery:

$("#cpa-form").submit(function(e){
    e.preventDefault();
  });

12
Burada iyi çalışıyor . Sorunuza daha fazla bilgi gönderebilir misiniz? Eğer varsa alert()teslim işleyicisinde denir alır? Değilse, komut dosyanızda olay işleyicinin doğru şekilde kablolanmasını engelleyen bir hata olabilir. Hata konsolunda bir şey var mı?
Kasaba

3
Bu bağlantı içseldir ve bizim için hiçbir faydası yoktur.
Steve Robbins

Belki daha eski bir sürüm önbelleğe alındı. Şimdi çalışıyor gibi görünüyor.
djreed


2
! Javascript kodunun DOM hazır olduktan sonra çalıştığından emin olun.
15'te

Yanıtlar:


175

Bunu dene:

$("#cpa-form").submit(function(e){
    return false;
});

12
İşe yarıyor, ancak tercih edilen Önleme Yöntemi yöntemi neden çalışmıyor?
MikeJ

26
Daha iyi bir açıklama için bu soruya bakın: stackoverflow.com/questions/1357118/…
Jordan Brown

8
Bu yanlış cevap. e.preventDefault()bir form gönderme ile iyi çalışıyor, sorun OP kodunun başka bir yerinde yatıyordu. Kullanmak istenmeyen sonuçlara yol return false açabilir .
Chuck Le Butt

58

Yeni "açık" etkinlik sözdizimini kullanın.

$(document).ready(function() {
  $('form').on('submit', function(e){
    // validation code here
    if(!valid) {
      e.preventDefault();
    }
  });
});

Alıntı: https://api.jquery.com/on/


2
Selam. Bu benim için işe yaramıyor. (evet, kodumu içeri koydum $(document).ready()) Nasıl çalıştırabilirim?
Gui Imamura

1
@GuiImamura Daha fazla bilgiye ihtiyacınız var. Geçerli değişkeni trueveya olarak ayarladınız falsemı? Kodunuzu jsfiddle.net'te yeniden oluşturabilir ve bağlantıyı gönderebilir misiniz? alert()İşlevin tetiklendiğini onaylamak için bir eklemeyi deneyin . Bazı insanlar ekleyerek bildirmiştir e.stopPropagation();sonra e.preventDefault();ateş diğer zincirleme olaylar durur.
scarver2

Merhaba, ben kullanıyorum $('#myFormID').validationEngine('validate')dan jQuery validationEngine değişken olarak validgirdi Hava kontrol etmek, geçerli bir e-posta adresi. Yine de, varsayılan davranışı her iki şekilde önlemek istiyorum; yok preventDefaultönce değil, eğer bloğunun içinde olmak zorunda?
Gui Imamura

@GuiImamura Çalıştığını duyduğuma sevindim. preventDefaultİçindeyse geçerli değilse formun teslim durdurmak için bloğun. Başka bir deyişle, geçerliyse , formun varsayılan davranışını kullanın.
scarver2

13

Yukarıdaki cevapların doğru olduğuna inanıyorum, ancak submityöntemin neden işe yaramadığına işaret etmiyor.

Peki, submitjQuery formöğeyi alamazsa ve jQuery bu konuda herhangi bir hata vermezse yöntem çalışmaz. Senaryonuz belgenin başlığında yerleştirilir, kod sonra çalıştığından emin olmak DOMolduğunu hazır . Yani, $(document).ready(function () { // your code here // });sorunu çözecek.

En iyi uygulama, komut dosyanızı her zaman belgenin altına yerleştirmektir.


11

Bu eski bir sorudur, ancak burada kabul edilen cevap sorunun köküne inmez.

Bunu iki şekilde çözebilirsiniz. İlk önce jQuery ile:

$(document).ready( function() { // Wait until document is fully parsed
  $("#cpa-form").on('submit', function(e){

     e.preventDefault();

  });
}

Veya jQuery olmadan:

// Gets a reference to the form element
var form = document.getElementById('cpa-form');

// Adds a listener for the "submit" event.
form.addEventListener('submit', function(e) {

  e.preventDefault();

});

return falseBu sorunu çözmek için kullanmanıza gerek yoktur .


Ben jquery olay dinleyici yerine yerli js olay dinleyici yerine ve iş. fikir için teşekkürler.
Orhan Gazi

6
$('#cpa-form input[name="Next"]').on('click', function(e){
    e.preventDefault();
});

Bu, sunucu tarafı formunun içinde bir istemci tarafı formunun olduğu bir sayfada benim için mükemmel çalışır.
Liknes


2

Kodunuz iyidir, sadece hazır fonksiyonun içine yerleştirmeniz gerekir.

$(document).ready( function() {
  $("#cpa-form").submit(function(e){
     e.preventDefault();
  });
}

Bu tavsiye zaten başka cevaplar tarafından verilmektedir. Sayfa şişkinliğini azaltmak için lütfen bu yanıtı kaldırın. Aynı duyguyu temsil eden diğer cevapları da oylayabilirsiniz.
mickmackusa

2

DEPRECATED - bu bölüm eski, lütfen kullanmayın.

Örneğin daha sonra dinamik formlar eklediyseniz bu kodu da deneyebilirsiniz. Örneğin, ajax içeren bir zaman uyumsuz pencere yüklediniz ve bu formu göndermek istiyorsunuz.

$('#cpa-form').live('submit' ,function(e){
    e.preventDefault();      
    // do something
});

GÜNCELLEME - dinamik olarak eklenen içeriği işlemek istiyorsanız DOM belgesini dinlemeye çalışmanız için jQuery on () yöntemini kullanmanız gerekir.

Durum 1, statik sürüm: Yalnızca birkaç dinleyiciniz varsa ve işlenecek formunuz sabit kodlanmışsa, doğrudan "belge düzeyinde" dinleyebilirsiniz. Dinleyicileri belge düzeyinde kullanmam ama kıyamet ağacında daha derine inmeye çalışacağım çünkü performans sorunlarına yol açabilir (web sitenizin boyutuna ve içeriğinize bağlıdır)

$('form#formToHandle').on('submit'... 

VEYA

$('form#formToHandle').submit(function(e) {
    e.preventDefault();      
    // do something
});

Durum 2, dinamik sürüm: Kodunuzdaki belgeyi zaten dinlerseniz, bu şekilde sizin için iyi olur. Bu, daha sonra DOM yoluyla veya AJAX ile dinamik olarak eklenen kod için de çalışır.

$(document).on('submit','form#formToHandle',function(){
   // do something like e.preventDefault(); 
});

VEYA

$(document).ready(function() {
    console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

VEYA

$(function() { // <- this is shorthand version
   console.log( "Ready, Document loaded!" );

    // all your other code listening to the document to load 

    $("#formToHandle").on("submit", function(){
        // do something           
    })
});

7
.live()jQuery 1.7'den beri kullanımdan kaldırılmış ve 1.9'dan beri kaldırılmıştır. .on()Bunun yerine kullanın .
Hank

0

Merhaba, bir Ajax formunun Google Etiket Yöneticisi (GTM) ile çalışmasını sağlamak için bir çözüm aradı, dönüş yanlış, tamamlamayı engelledi ve etkinliğin gerçek zamanlı olarak google analitik çözümünde gönderilmesini sağladı, dönüş yanlışını e.preventDefault () ile değiştirmek ; doğru çalışan kodu izler:

 $("#Contact-Form").submit(function(e) {
    e.preventDefault();
   ...
});

0

e.preventDefault () yalnızca javascriptsinizde sorun yoksa iyi çalışır, e.preventDefault () çalışmazsa javascriptsinizi kontrol edin.


0

Benzer bir sorunla karşılaştım. Benim için sorun, DOM oluşturma gerçekleşmeden önce JS dosyasının yüklenmesidir. Yani <script>sonuna kadar taşıyın<body>Etiketinizi .

veya erteleme kullanın.

<script defer src="">

böylece emin e.preventDefault()çalışması gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.