2012-04-25 34 views
29

Tôi làm cách nào để thực hiện một chức năng sau khi toggleClass đã hoàn thành? Tôi đã thử những điều sau đây nhưng không có may mắn:chức năng jquery trên toggleClass hoàn thành?

$("#loader").toggleClass('fadeOut', function() { 
    alert('a'); 
}); 
+4

lớp chuyển đổi là ngay lập tức và bạn không cần phải gọi lại cho toggleClass, chỉ cần đặt 'alert ('a')' trong dòng tiếp theo sẽ cảnh báo sau khi toggleClass –

+0

im cố gắng để có được $ ("# loader") để ẩn() sau khi mờ dần, làm thế nào tôi có thể làm điều này? – panthro

+0

Tôi đang cố gắng để có được $ ("# loader") để ẩn() sau khi nó bị mờ đi, làm thế nào tôi có thể làm điều này? - – panthro

Trả lời

68

Các jQuery có phương pháp hứa hẹn trả về một đối tượng thu nhập hoãn lại mà bạn có thể truy cập bằng .promise(). Đối tượng lời hứa này sẽ được giải quyết sau khi tất cả hoạt ảnh đang chạy trên các phần tử đã chọn hoàn tất. Tại thời điểm đó, bạn có thể liên kết với phương thức đã hoàn thành của nó.

$("#loader").toggleClass('fadeOut',600).promise().done(function(){ 
    alert('a'); 
}); 

http://jsfiddle.net/skram/4x76J/

+1

:) +1 để sử dụng đối tượng trì hoãn. –

+13

Giải pháp này yêu cầu giao diện người dùng jQuery. – Aryo

+0

mà không có jquery ui nó sẽ không phải là một hình ảnh động, và do đó sẽ không có một cuộc gọi lại. điểm của bạn? –

1

toggleClass được thực hiện ngay lập tức và do đó bạn không cần phải gọi lại cho toggleClass, chỉ cần đặt alert('a') trong dòng tiếp theo đó sẽ cảnh báo sau khi toggleClass được thực thi.

Chỉnh sửa: Có vẻ như bạn muốn có hiệu ứng giao diện người dùng jQuery - toggleClass không may có chức năng gọi lại.

Có lẽ bạn nên viết chức năng chuyển đổi của riêng mình. Xem dưới đây để fadeIn/fadeOut chuyển đổi,

var $loader = $("#loader"); 
if ($loader.is(':visible')) { 
    $loader.fadeOut(100, function() { 
     alert('fade out complete'); 
    }); 
} else { 
    $loader.fadeIn(100, function() { 
     alert('fadeIn complete'); 
    }); 
} 
+0

Tôi đang cố gắng để có được $ ("# loader") để ẩn() sau khi nó bị mờ đi, làm thế nào tôi có thể làm điều này? - – panthro

+0

@ user1013512 Có vẻ như toggleClass trong các hiệu ứng giao diện người dùng jQuery không có gọi lại .. Hãy xem bài đăng đã cập nhật của tôi và cho tôi biết nếu điều đó có hiệu quả với bạn hay không. –

+1

@Vega hiện '.toggleClass()' đưa ra một đối tượng trì hoãn? try '.toggleClass(). promise(). done (function() {alert (" done ")});' Hầu hết các phương thức hoạt hình nếu không phải tất cả trả về một đối tượng trì hoãn. –

-1
$("#loader").stop().fadeTo(400,0, function() { 
     $(this).toggleClass('fadeOut').hide(); // exec after is faded out. 
     alert(' ta-da!'); 
    }); 
-1

tôi đã sử dụng phương pháp khác để đối phó với vấn đề này. Trong ví dụ này tôi kết hợp .delay() chức năng và .queue()

$(this).toggleClass("focus_out").delay(500).queue(function(custom_call_back) { 
    $(this).removeClass('focus_out'); 
    custom_call_back(); 
}); 

Trong trường hợp của bạn có thể là $(this)$('#loader')

jQuery: .delay();queue();

Các vấn đề liên quan