2011-10-04 7 views
7

Tôi đang cố gắng hiển thị một fieldset cùng một lúc, dựa trên lựa chọn của người dùng. Lý thuyết là, tất cả các fieldets nên ẩn đầu tiên, sau đó fieldset được chọn sẽ được hiển thị. Tôi đang sử dụng các hàm fadeOut và 'fadeIn` của jQuery.jQuery fadeOut/fadeTrong không hoạt động như mong đợi?

Bạn có thể thấy số f2 của số này here.

Nhưng nó không hoạt động tốt. Chuyện gì vậy? Khi bạn thay đổi loại quyền sở hữu, hai trường đầu tiên được hiển thị, sau đó chúng mờ đi và mờ dần, sau đó trường dự định sẽ xuất hiện. Tuy nhiên, hành vi mong muốn là, về việc thay đổi loại sở hữu, các fieldset hiện thời hiển thị đơn giản mờ dần, và sau đó là phai fieldset dự định trong.

+0

Bạn nên đăng các mã vào đây để sử dụng trong tương lai trong trường hợp jsfiddle không tồn tại. –

Trả lời

6

Bạn cũng có thể sử dụng một 'lời hứa' http://api.jquery.com/jQuery.when/ để chắc chắn rằng fadeIn xảy ra sau khi fieldset đã nhạt nhòa dần.

$(function() { 
    var ownershipType = $('#ownershipType').first(); 
    var fieldsets = $('fieldset'); 
    ownershipType.change(function() { 
     var promise = fieldsets.fadeOut(2000); 
     $.when(promise).then(function() {$('fieldset[data-ownership-type=' + ownershipType.val() + ']').fadeIn('fast'); 
     }); 
    }); 
}); 

http://jsfiddle.net/DtaHQ/26/

+0

Vâng, tốt! Tôi đã học được điều gì đó mới mẻ. Cảm ơn vì cách chi của bạn @Vertigo. –

3

Thay đổi mã của bạn để

$(function() { 
    var ownershipType = $('#ownershipType').first(); 
    var fieldsets = $('fieldset'); 
    ownershipType.change(function() { 
     $('fieldset:visible').fadeOut(2000, function() { 
      $('fieldset[data-ownership-type=' + ownershipType.val() + ']').fadeIn('fast'); 
     }); 
    }); 
}); 

Bạn chỉ muốn làm mờ dần trường dữ liệu hiện đang hiển thị.

http://jsfiddle.net/DtaHQ/24/

+0

Nhưng tại sao mã của tôi không hoạt động? Tôi có nghĩa là, sau khi tất cả, mờ dần ra một cái gì đó là vô hình không nên phá vỡ bất cứ điều gì? –

+0

Samich có câu trả lời. Mã ban đầu của bạn đã nói "mờ dần TẤT CẢ các trường." Nhưng bạn có một điểm tốt. [Tài liệu hướng dẫn cho fadeOut] (http://api.jquery.com/fadeOut/) không nói rằng các div đã ẩn không phụ thuộc vào hoạt ảnh này. :) Giúp giải thích số lượng tốt đẹp của upvotes cho câu hỏi của bạn! –

4

Vấn đề là bạn đã có ẩn fieldset và cho những yếu tố hoạt hình của fadeOut cháy ngay lập tức, vì nó đã được ẩn.

Hãy thử thay đổi như sau:

$(function() { 
    var ownershipType = $('#ownershipType').first(); 
    ownershipType.change(function() { 
     $('fieldset:visible').fadeOut(2000, function() { 
      $('fieldset[data-ownership-type=' + ownershipType.val() + ']').fadeIn('fast'); 
     }); 
    }); 
}); 

Code: http://jsfiddle.net/DtaHQ/20/

+0

Lời giải thích của bạn vừa bị rung chuyển @Samich. Lưu ý tuyệt vời. Cảm ơn và +1 –