Wyłącz automatyczne przesyłanie formularza po kliknięciu przycisku


180

Mam formularz HTML, w którym używam kilku przycisków. Problem polega na tym, że bez względu na to, który przycisk kliknę, formularz zostanie przesłany, nawet jeśli przycisk nie jest typu „prześlij”. np. Przyciski takie jak: <button>Click to do something</button>powodują przesłanie formularza.

Wykonanie e.preventDefault()każdego z tych przycisków jest dość bolesne .

Używam jQuery i jQuery UI, a strona jest w HTML5.

Czy istnieje sposób na wyłączenie tego automatycznego zachowania?

Odpowiedzi:


460

Przyciski jak <button>Click to do something</button> złożyć przyciski.

Ustaw, type="button"aby to zmienić. type="submit"jest wartością domyślną ( określoną w zaleceniu HTML ).


24
straciłem dzień na próżno na próżno naprawiając mój kod, ponieważ nie znałem tej prostej specyfikacji!
palerdot

4
Przywołując pojęcie palerdota, cieszę się, że znalazłem tę notatkę po szybkim wyszukiwaniu w Google i nie zabiłem godzin. Bardzo wiem, wielkie dzięki.
brooklynsweb

2
@NiketJoshi - Wydaje się, że to stwierdzenie nie ma nic wspólnego z pytaniem, na które udzielono odpowiedzi. Jeśli masz nowe pytanie, zadaj je, ale upewnij się, że podałeś jasne oświadczenie o problemie i minimalny, powtarzalny przykład .
Quentin,

19

Możesz po prostu spróbować użyć return false (return false zastępuje domyślne zachowanie każdego elementu DOM) w następujący sposób:

myform.onsubmit = function ()
{ 
  // do what you want
  return false
}

a następnie prześlij formularz za pomocą myform.submit ()

lub alternatywnie:

mybutton.onclick = function () 
{
   // do what you want
   return false
}

Ponadto, jeśli skorzystasz type="button"z formularza, nie zostanie przesłany.


8

<button>są w rzeczywistości przyciskami przesyłania, nie mają innych głównych funkcji. Będziesz musiał ustawić typ na przycisk.
Ale jeśli powiążesz moduł obsługi zdarzeń, jak poniżej, celujesz we wszystkie przyciski i nie musisz robić tego ręcznie dla każdego przycisku!

$('form button').on("click",function(e){
    e.preventDefault();
});

Jest e.preventDefault();.
hlcs,

0

jeśli chcesz dodać bezpośrednio do danych wejściowych jako atrybut, użyj tego

 onclick="return false;" 

<input id = "btnPlay" type="button" onclick="return false;" value="play" /> 

zapobiegnie to zachowaniu formularza


0

inny:

if(this.checkValidity() == false) {

                $(this).addClass('was-validated');
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();

                return false;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.