Mam problem podczas używania przycisków w formularzu. Chcę, żeby ten przycisk wywoływał funkcję. Tak, ale z niepożądanym skutkiem odświeża stronę.
Mój prosty kod wygląda tak
<form method="POST">
<button name="data" onclick="getData()">Click</button>
</form>
Po kliknięciu przycisku funkcja zostaje wywołana z odświeżeniem strony, co powoduje zresetowanie wszystkich moich poprzednich żądań, które mają wpływ na bieżącą stronę, będącą wynikiem poprzedniego żądania.
Co powinienem zrobić, aby zapobiec odświeżeniu strony?
javascript
html
bunkdeath
źródło
źródło
Odpowiedzi:
Niech
getData()
zwróci fałsz. To naprawi to.źródło
onclick
Funkcja musi zwrócić fałszywe, niegetData
.type="button"
jest naprawdę haczykiem.Dodaj
type="button"
do przycisku.Domyślna wartość
type
przycisku tosubmit
, która samodzielnie publikuje formularz w Twoim przypadku i sprawia, że wygląda jak odświeżenie.źródło
return false;
do onclick:onclick="getData(); return false;"
Wszystko, co musisz zrobić, to umieścić znacznik typu i zrobić przycisk typu.
To rozwiązuje problem
źródło
Problem w tym, że uruchamia przesłanie formularza. Jeśli wykonasz tę
getData
funkcjęreturn false
, powinna ona zatrzymać przesyłanie formularza.Alternatywnie możesz również użyć
preventDefault
metody obiektu zdarzenia:źródło
HTML
jQuery
źródło
zamiast tagu przycisku, użyj tagu wejściowego. Lubię to,
źródło
button type='button'
Jeśli twój przycisk jest domyślnym „przyciskiem”, upewnij się, że wyraźnie ustawiłeś atrybut type, w przeciwnym razie WebForm potraktuje go jako domyślny.
jeśli używasz js, zrób to w ten sposób
źródło
Metoda javascript służąca do wyłączania samego przycisku
Gdy wszystkie pola formularza spełnią Twoje kryteria, możesz ponownie włączyć przycisk
Używanie Jquery będzie wyglądać mniej więcej tak
źródło
Z jakiegokolwiek powodu w Firefoksie, mimo że mam
return false;
imyform.preventDefault();
w funkcji, odświeża stronę po uruchomieniu funkcji. I nie wiem, czy to dobra praktyka, ale u mnie działa, wstawiamjavascript:this.preventDefault();
atrybut działania.Jak powiedziałem, próbowałem wszystkie inne sugestie i one działać poprawnie we wszystkich przeglądarkach, ale Firefox, jeśli masz ten sam problem, spróbuj dodanie zapobiec zdarzenie w atrybucie akcji albo
javascript:return false;
albojavascript:this.preventDefault();
. Nie próbuj zjavascript:void(0);
który złamie twój kod. Nie pytaj mnie dlaczego :-).Nie sądzę, żeby to był elegancki sposób, ale w moim przypadku nie miałem innego wyjścia.
Aktualizacja:
Jeśli otrzymałeś błąd ... po przetworzeniu Ajax, usuń akcję atrybutu iw
onsubmit
atrybucie wykonaj swoją funkcję, po której nastąpi fałszywy zwrot:onsubmit="functionToRun(); return false;"
Nie wiem, dlaczego tak się dzieje z Firefoksem, ale mam nadzieję, że to zadziała.
źródło
Funkcja Return nie działa we wszystkich przypadkach. Próbowałem tego:
To mi nie pomogło.
Próbowałem zwrócić false wewnątrz funkcji i zadziałało.
źródło
Miałem ten sam problem. Problem dotyczy
onclick
funkcji. Nie powinno być żadnych problemów z funkcjągetData
. Zadziałało, powodując, żeonclick
funkcja zwróciła fałsz.źródło
To jest najlepsze rozwiązanie:
Uwaga: mój kod jest bardzo prosty.
źródło
Możesz użyć Ajax i jquery, aby rozwiązać ten problem:
źródło