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.logpolecenie do mojego skryptu, jak w poniższym fragmencie:
$("#link_button")
.button()
.click(function () {
console.log("DEBUG: sliding toggle...");
$("#attachmentForm").slideToggle("fast");
});
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 offmetody (btw unbindjest przestarzałe od jQuery 3.0) do rozpinania zdarzenia przed (ponownym) wiązaniem działa dobrze i też je polecam:
$("#link_button")
.button()
.off("click")
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
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.