jQuery slideUp (). remove () dường như không hiển thị hoạt ảnh slideUp trước khi loại bỏ xảy ra


94

Tôi có dòng JavaScript này và hành vi mà tôi đang thấy là nó selectedLibiến mất ngay lập tức mà không "trượt lên". Đây không phải là hành vi mà tôi mong đợi.

Tôi nên làm gì để các selectedLitrang trình bày lên trước khi nó bị xóa?

selectedLi.slideUp("normal").remove();

Câu trả lời:


197

Có thể khắc phục nó bằng cách đặt lệnh gọi để loại bỏ trong một đối số gọi lại đến slideUp không?

ví dụ

selectedLi.slideUp("normal", function() { $(this).remove(); } );

4
Lưu ý rằng "chậm" và "nhanh" là tốc độ duy nhất. Tốc độ khác cần phải thể là trong mili giây hoặc họ sẽ mặc định 400. keyframesandcode.com/resources/javascript/deconstructed/jquery/...
bendman

19

Bạn cần phải nói rõ ràng hơn: thay vì nói "cái này" (mà tôi đồng ý là nên làm việc), bạn nên làm điều này:

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});

2
SORRY = tôi quên xóa id của mình, phải là: $ ('# yourdiv'). SlideUp (1000, function () {$ ('# yourdiv'). Remove ();});
Blake

12
Sử dụng $ (this) thay vì $ ("# yourdiv") được tối ưu hóa hơn vì jQuery không cần tìm nút.
MaximeBernard

Sử dụng $("#yourdiv")thay vì $(this)là hoàn toàn dư thừa và đó không phải là lý do tại sao mã này khắc phục sự cố của OP. Mã này khắc phục sự cố vì nó sử dụng lệnh completegọi lại.
Gavin

8

Cách đơn giản nhất là gọi hàm "remove ()" bên trong slideUp như một tham số như những người khác đã nói, như ví dụ sau:

$("#yourdiv").slideUp("normal", function() {
    $(this).remove();
});

Bắt buộc phải gọi nó bên trong hàm ẩn danh () để ngăn remove () được thực thi trước khi slideUp kết thúc. Một cách tương tự khác là sử dụng hàm jQuery "promise ()". Tốt hơn cho những người thích mã tự giải thích, như tôi;)

$("#yourdiv").slideUp("normal").promise().done(function() {
    $(this).remove();
});

3

Sử dụng các hứa hẹn, bạn cũng có thể đợi nhiều hoạt ảnh hoàn thành, ví dụ:

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})

-2
selectedLi.slideUp(200, this.remove);

1
Tôi đã thử nghiệm - nó không xóa phần tử sau khi trượt lên.
Konstantin Spirin

Ẩn phần tử một cách hiệu quả, nhưng không thực sự xóa phần tử đó khỏi DOM.
andreszs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.