ฉันมี JavaScript บรรทัดนี้และพฤติกรรมที่ฉันเห็นคือมันselectedLi
หายไปทันทีโดยไม่ต้อง "เลื่อนขึ้น" นี่ไม่ใช่พฤติกรรมที่ฉันคาดไว้
ฉันควรทำอย่างไรเพื่อให้selectedLi
สไลด์ขึ้นก่อนที่จะถูกลบออก
selectedLi.slideUp("normal").remove();
ฉันมี JavaScript บรรทัดนี้และพฤติกรรมที่ฉันเห็นคือมันselectedLi
หายไปทันทีโดยไม่ต้อง "เลื่อนขึ้น" นี่ไม่ใช่พฤติกรรมที่ฉันคาดไว้
ฉันควรทำอย่างไรเพื่อให้selectedLi
สไลด์ขึ้นก่อนที่จะถูกลบออก
selectedLi.slideUp("normal").remove();
คำตอบ:
อาจสามารถแก้ไขได้โดยวางสายเพื่อลบใน callback arg ไปที่ slideUp?
เช่น
selectedLi.slideUp("normal", function() { $(this).remove(); } );
คุณต้องมีความชัดเจนมากกว่านี้: แทนที่จะพูดว่า "สิ่งนี้" (ซึ่งฉันเห็นด้วยว่าควรใช้งานได้) คุณควรทำสิ่งนี้:
$("#yourdiv").slideUp(1000, function() {
$(this).remove();
});
$("#yourdiv")
แทน$(this)
นั้นซ้ำซ้อนโดยสิ้นเชิงและนั่นไม่ใช่สาเหตุที่รหัสนี้แก้ไขปัญหาของ OP รหัสนี้แก้ไขปัญหาได้เนื่องจากใช้การcomplete
โทรกลับ
วิธีที่ง่ายที่สุดคือการเรียกใช้ฟังก์ชัน "remove ()" ภายใน slideUp เป็นพารามิเตอร์เหมือนที่คนอื่น ๆ กล่าวไว้ดังตัวอย่างนี้:
$("#yourdiv").slideUp("normal", function() {
$(this).remove();
});
จำเป็นต้องเรียกใช้ภายในฟังก์ชัน anonymous () เพื่อป้องกันไม่ให้ลบ () ดำเนินการก่อนที่ slideUp จะสิ้นสุด อีกวิธีที่เท่าเทียมกันคือการใช้ฟังก์ชัน jQuery "สัญญา ()" ดีกว่าสำหรับผู้ที่ชอบรหัสอธิบายตัวเองเช่นฉัน;)
$("#yourdiv").slideUp("normal").promise().done(function() {
$(this).remove();
});
การใช้คำสัญญาคุณสามารถรอให้แอนิเมชั่นหลาย ๆ ภาพเสร็จสิ้นเช่น:
selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
selectedLi.remove()
})
selectedLi.slideUp(200, this.remove);