Skonfigurowałem element link i wywołałem jego zdarzenie click w jquery, ale zdarzenie click wywołuje dwukrotnie. Zobacz poniżej kod jquery.
$("#link_button")
.button()
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
Proszę doradź.
Dzięki.
Odpowiedzi:
Upewnij się i sprawdź, czy przypadkowo nie umieściłeś skryptu dwukrotnie na swojej stronie HTML.
źródło
Zrób unbind przed kliknięciem;
źródło
Oznacza to, że Twój kod dwukrotnie zawierał skrypt jquery. Ale spróbuj tego:
źródło
Próbowałem
e.stopImmediatePropagation()
; To wydaje się działać dla mnie.źródło
W moim przypadku skorzystałem z poniższego skryptu, aby rozwiązać problem
off()
usuwa powiązanie wszystkich zdarzeń#id
. Jeśli chcesz usunąć powiązanie tylkoclick
wydarzenia, użyjoff('click')
.źródło
Po prostu wywołaj .off () tuż przed wywołaniem .on ().
Spowoduje to usunięcie wszystkich programów obsługi zdarzeń:
Aby usunąć tylko zarejestrowane moduły obsługi zdarzeń typu „kliknięcie”:
źródło
Dość powszechnym rozwiązaniem problemu dwóch kliknięć jest umieszczanie
na końcu funkcji (zakładając,
function(e)
że to używasz ). Zapobiega to bulgotaniu zdarzenia, które mogłoby doprowadzić do drugiego wykonania funkcji.źródło
Miałem ten sam problem, ale możesz spróbować zmienić ten kod
do tego:
Dla mnie ten kod rozwiązał problem. Uważaj jednak, aby przypadkowo nie umieścić skryptu dwukrotnie na stronie HTML. Myślę, że jeśli wykonasz te dwie rzeczy poprawnie, twój kod będzie działał poprawnie. Dzięki
źródło
proszę spróbuj tego
źródło
Jest to zdecydowanie błąd, szczególnie gdy jest to FireFox. Szukałem dużo, próbowałem wszystkich powyższych odpowiedzi i w końcu otrzymałem to jako błąd przez wielu ekspertów w porównaniu z SO. W końcu wpadłem na ten pomysł, deklarując zmienną taką jak
W ten sposób najpierw sprawdza, czy funkcja została wcześniej wywołana, czy nie.
źródło
Dodawanie
e.preventDefault();
na początku mojej funkcji działało dla mnie.źródło
To jest starsze pytanie, ale jeśli używasz delegowania zdarzeń, to właśnie to spowodowało.
Po usunięciu
.delegate-two
przestał się wykonywać dwukrotnie. Uważam, że dzieje się tak, gdy obaj delegaci są obecni na tej samej stronie.źródło
ten fragment kodu nie zawiera nic złego. To kolejna część twojego skryptu, jak powiedział @karim
źródło
W moim przypadku działało dobrze w Chrome, a IE dzwonił
.click()
dwukrotnie. jeśli to był twój problem, naprawiłem go, zwracając false po wywołaniu.click()
zdarzeniaźródło
Dzwonienie
unbind
rozwiązało mój problem:źródło
Nie wiem dlaczego, ale miałem z tym problem
Kiedy zmieniłem to na
Problem został rozwiązany. Ale na pewno coś jest nie tak w moim kodzie.
źródło
Zostałem oszukany przez wybór pasujący do wielu elementów, więc każdy został kliknięty.
:first
pomógł:źródło
Ja też miałem ten problem na FF. Mój tag był jednak powiązany z
<a>
tagiem. Chociaż<a>
tag nigdzie się nie przenosił, wciąż klikał dwukrotnie. Zamiast tego zamieniłem<a>
tag na<span>
tag i problem z podwójnym kliknięciem zniknął.Inną alternatywą jest całkowite usunięcie atrybutu href, jeśli link nigdzie nie idzie.
źródło
Napotkałem ten problem, ponieważ mój
$(elem).click(function(){});
skrypt został umieszczony w tekście w elemencie div, który był ustawiony nastyle="display:none;"
.Gdy wyświetlanie css zostało przełączone na blok, skrypt dodawał detektor zdarzeń po raz drugi. Przeniosłem skrypt do oddzielnego pliku .js i zduplikowany detektor zdarzeń nie był już inicjowany.
źródło
Kiedy używam tej metody na ładowaniu strony za pomocą jquery, piszę
$('#obj').off('click');
przed ustawieniem funkcji kliknięcia, więc bąbelek się nie pojawia. Pracuje dla mnie.źródło
Moją prostą odpowiedzią było przekształcenie powiązania kliknięcia w funkcję i wywołanie tego jednym kliknięciem elementu - zadziałało! podczas gdy żadne z powyższych nie miało
źródło
Jeśli Twoje wydarzenie dzwoni dwa, trzy lub więcej razy, może to pomóc.
Jeśli używasz czegoś takiego do wyzwalania zdarzeń…
… Następnie zwróć uwagę na liczbę
.js-someclass
elementów, które masz na stronie, ponieważ wywoła to zdarzenie kliknięcia dla wszystkich elementów - a nie tylko raz!Prostym rozwiązaniem jest więc upewnienie się, że kliknięcie zostanie uruchomione tylko raz, wybierając tylko pierwszy element , np .:
źródło
Jasne, że w innym miejscu skryptu (-ów) zdarzenie „kliknięcie” jest ponownie przypisywane do tego samego elementu, jak sugeruje kilka innych odpowiedzi / komentarzy.
Miałem podobny problem i żeby to sprawdzić, po prostu dodałem
console.log
polecenie do mojego skryptu, jak w poniższym fragmencie:Jeśli po kliknięciu przycisku otrzymasz coś podobnego do poniższego obrazu z konsoli programisty przeglądarki (tak jak ja), to wiesz na pewno, że
click()
zdarzenie zostało dwukrotnie przypisane do tego samego przycisku.Jeśli potrzebujesz szybkiej łatki, rozwiązanie proponowane przez innych komentatorów polegające na użyciu
off
metody (btwunbind
jest przestarzałe od jQuery 3.0) do rozpinania zdarzenia przed (ponownym) wiązaniem działa dobrze i też je polecam:Niestety to tylko tymczasowa łatka! Gdy problem uszczęśliwienia szefa zostanie rozwiązany, naprawdę powinieneś zagłębić się w kod i rozwiązać problem ze „zduplikowanym wiązaniem”.
Rzeczywiste rozwiązanie zależy oczywiście od konkretnego przypadku użycia. Na przykład w moim przypadku był problem „kontekstu”. Moja funkcja była wywoływana w wyniku wywołania Ajax zastosowanego do określonej części dokumentu: przeładowanie całego dokumentu w rzeczywistości przeładowywało zarówno kontekst "strony", jak i "element", co skutkowało dwukrotnym powiązaniem zdarzenia z elementem .
Moim rozwiązaniem tego problemu było wykorzystanie jednej funkcji jQuery , która jest taka sama jak on, z wyjątkiem tego, że zdarzenie jest automatycznie odłączane po pierwszym wywołaniu. To było idealne rozwiązanie dla mojego przypadku użycia, ale znowu może nie być rozwiązaniem dla innych przypadków użycia.
źródło
Miałem ten sam problem. To zadziałało dla mnie -
Mam nadzieję, że to komuś pomoże.
źródło
W moim przypadku HTML wyglądał następująco:
A moje jQuery wyglądało tak:
Zdezorientowało mnie to, ponieważ wydawało się, że nic się nie dzieje. Problem polegał na tym, że wewnętrzne
.share
stoggle
byłoby zrezygnować z zewnętrznej.share
stoggle
.źródło
Rozwiązałem ten problem, zmieniając typ elementu. zamiast przycisku umieszczam dane wejściowe i ten problem już się nie pojawia.
instesd of:
zamienić:
źródło