Chắc chắn rằng ở một nơi khác trong (các) tập lệnh của bạn, sự kiện "nhấp chuột" đang được liên kết lại với cùng một phần tử, như một số câu trả lời / nhận xét khác đang đề xuất.
Tôi đã gặp sự cố tương tự và để xác minh điều đó, tôi chỉ cần thêm một console.log
lệnh vào tập lệnh của mình, như trong đoạn mã sau:
$("#link_button")
.button()
.click(function () {
console.log("DEBUG: sliding toggle...");
$("#attachmentForm").slideToggle("fast");
});
Nếu, khi nhấp vào nút, bạn nhận được thứ gì đó tương tự như hình ảnh bên dưới từ bảng điều khiển dành cho nhà phát triển của trình duyệt (như tôi đã làm), thì bạn biết chắc rằng click()
sự kiện đã được liên kết hai lần với cùng một nút.
Nếu bạn cần một bản vá nhanh chóng, giải pháp được đề xuất bởi các nhà bình luận khác là sử dụng off
phương pháp (btw unbind
không được dùng nữa kể từ jQuery 3.0) để hủy liên kết sự kiện trước khi (lại) ràng buộc nó hoạt động tốt và tôi cũng khuyên bạn nên thực hiện:
$("#link_button")
.button()
.off("click")
.click(function () {
$("#attachmentForm").slideToggle("fast");
});
Thật không may, đây chỉ là một bản vá tạm thời! Một khi vấn đề khiến bạn hài lòng với sếp đã được giải quyết, bạn thực sự nên đào sâu vào mã của mình hơn một chút và khắc phục vấn đề "ràng buộc trùng lặp".
Giải pháp thực tế tất nhiên phụ thuộc vào trường hợp sử dụng cụ thể của bạn. Trong trường hợp của tôi, chẳng hạn, có một vấn đề về "ngữ cảnh". Hàm của tôi đang được gọi là kết quả của lệnh gọi Ajax được áp dụng cho một phần cụ thể của tài liệu: tải lại toàn bộ tài liệu thực sự là tải lại cả ngữ cảnh "trang" và "phần tử", dẫn đến sự kiện được liên kết với phần tử hai lần .
Giải pháp của tôi cho vấn đề này là sử dụng một hàm jQuery , tương tự như trên ngoại trừ sự kiện được tự động bỏ ràng buộc sau lần gọi đầu tiên của nó. Đó là lý tưởng cho trường hợp sử dụng của tôi nhưng một lần nữa, nó có thể không phải là giải pháp cho các trường hợp sử dụng khác.