Jak sprawić, by przycisk HTML nie ładował ponownie strony


117

Mam przycisk ( <input type="submit">). Po kliknięciu strona ładuje się ponownie. Ponieważ mam kilka hide()funkcji jQuery, które są wywoływane podczas ładowania strony, powoduje to ponowne ukrycie tych elementów. Jak sprawić, by przycisk nic nie robił, więc nadal mogę dodać akcję, która ma miejsce, gdy przycisk jest kliknięty, ale nie ładuje ponownie strony.

Odpowiedzi:


229

nie ma potrzeby używania js ani jquery. aby zatrzymać ponowne ładowanie strony, określ typ przycisku jako „przycisk”. jeśli nie określisz typu przycisku, przeglądarka ustawi go na „reset” lub „wyślij”, co spowoduje ponowne załadowanie strony.

 <button type='button'>submit</button> 

3
To działa! To dobra alternatywa dla <input type='button' />.
Rick

5
Działa to dobrze, a szczególnie w przypadku Chrome (dla którego zaakceptowana odpowiedź nie)
hobailey

3
Praca w Chrome w Windows 10. Tak!
ssdscott

82

Użyj <button>elementu lub użyj pliku <input type="button"/>.


110
Element <button> domyślnie powoduje przeładowanie w chrome (przynajmniej).
AdamC,

2
nadal możesz użyć formularza onsubmit event i zwrócić false, jeśli nadal nie chcesz wracać
neu-rah

4
@Joe faktycznie niestety tak: / Potrzebuję mojej aplikacji internetowej do pracy z IE8 i to przeładowanie jest trochę denerwujące ...
Ms. Nobody

24
@pbeardshear Dzieje się tak, jeśli zostanie umieszczony w formularzu. kiedy <button>jest umieszczony poza formularzem, odświeżanie nie następuje!
Kevinvhengst

13
dodaj type="button"do <button>elementu w chrome i nie odświeża
Johnny Metz

21

W HTML:

<form onsubmit="return false">
</form>

aby uniknąć odświeżania wszystkich „przycisków”, nawet z przypisanym kliknięciem.


15

Możesz dodać moduł obsługi kliknięcia do przycisku za pomocą jQuery i zwrócić false.

$("input[type='submit']").click(function() { return false; });

lub

$("form").submit(function() { return false; });

6
To nie działa. Zwracanie false w chrome, przynajmniej w najnowszych wersjach, nadal powoduje odświeżenie.
user3690202

To jedyna odpowiedź, która faktycznie mi pomogła. Właśnie dodałem return false w mojej funkcji, a odświeżanie zatrzymało się zarówno w Safari, jak i Chrome.
VessoVit

13

W HTML:

<input type="submit" onclick="return false">

W przypadku jQuery wspomniano już o podobnym wariancie.


9

Możesz użyć formularza, który zawiera przycisk przesyłania. Następnie użyj jQuery, aby zapobiec domyślnemu zachowaniu formularza:

$(document).ready(function($) {
  $(document).on('submit', '#submit-form', function(event) {
    event.preventDefault();
  
    alert('page did not reload');
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form id='submit-form'>
  <button type='submit'>submit</button>
</form>


4

Jak stwierdzono w jednym z komentarzy (ukrytych) powyżej, można to naprawić, nie umieszczając tagu przycisku wewnątrz tagu formularza. Gdy przycisk znajduje się poza formularzem, strona nie odświeża się.


2

Nie mogę jeszcze komentować, więc zamieszczam to jako odpowiedź. Najlepszym sposobem uniknięcia przeładowania jest to, jak powiedział @ user2868288: używając znaku onsubmitna formtagu.

Ze wszystkich innych możliwości wymienionych tutaj, jest to jedyny sposób, który pozwala na wyzwolenie nowej walidacji danych wejściowych przeglądarki HTML5 ( <button>nie zrobi tego ani modułów obsługi jQuery / JS) i pozwala na dołączenie dynamicznych informacji jQuery / AJAX do strona. Na przykład:

<form id="frmData" onsubmit="return false">
 <input type="email" id="txtEmail" name="input_email" required="" placeholder="Enter a valid e-mail" spellcheck="false"/>
 <input type="tel" id="txtTel" name="input_tel" required="" placeholder="Enter your telephone number" spellcheck="false"/>
 <input type="submit" id="btnSubmit" value="Send Info"/>
</form>
<script type="text/javascript">
  $(document).ready(function(){
    $('#btnSubmit').click(function() {
        var tel = $("#txtTel").val();
        var email = $("#txtEmail").val();
        $.post("scripts/contact.php", {
            tel1: tel,
            email1: email
        })
        .done(function(data) {
            $('#lblEstatus').append(data); // Appends status
            if (data == "Received") {
                $("#btnSubmit").attr('disabled', 'disabled'); // Disable doubleclickers.
            }
        })
        .fail(function(xhr, textStatus, errorThrown) { 
            $('#lblEstatus').append("Error. Try later."); 
        });
     });
   }); 
</script>
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.