2012-08-02 28 views
7

Ý tưởng cơ bản là tôi có một loạt các div trong đó mỗi cái có thể được bật (hiển thị/ẩn).Jquery toggle (Bấm để hiển thị một div trong khi ẩn những người khác)

Khi một div bị tắt, tôi muốn các div khác hiện đang được hiển thị để ẩn, do đó chỉ cho phép một div duy nhất được hiển thị cùng một lúc.

Ngoài ra, tôi muốn có thể nhấp vào bên ngoài phần tử để ẩn div mở.

Chỉ để làm cho mọi thứ rõ ràng hơn, tôi đã cung cấp ví dụ hiện đang làm mọi thứ tôi muốn trừ khi đóng div khi mở khác (Chỉ có một div mở tại một chức năng thời gian).

http://jsfiddle.net/walker2238/NFTFw/27/

Cập nhật: Vấn đề giải quyết cảm ơn bạn đã góp ý và dành thời gian để giúp tôi ra ngoài.

+1

accordion có làm những gì bạn muốn không? http://jqueryui.com/demos/accordion/ –

+0

@KieranAndrews: Nghe có vẻ như vậy, ngoại trừ việc nó không tự động đóng khi bạn nhấp vào một nơi khác. –

+0

Có một cài đặt cho điều đó, hãy để tôi tìm nó. –

Trả lời

8

Giải xong trong http://jsfiddle.net/NFTFw/29/

Bạn về cơ bản chỉ cần để ẩn tất cả các div trừ một đang được toggled.

+0

Vâng khá nhiều ... Tôi sẽ cho nó một đi. – walker2238

+0

Đây chính là điều tôi muốn. Cảm ơn bạn đã trả lời nhanh với câu trả lời thẳng về phía trước. – walker2238

+0

Đây vẫn là lỗi. Nếu bạn bấm vào một mục trình đơn, nó sẽ đóng menu ... –

0

Mã này nên thực hiện thủ thuật mà không cần sử dụng thư viện bổ sung. :)

http://jsfiddle.net/NFTFw/42/

$(document).ready(function(){ 

    var dd = $(".dropdown-container"); 

    $("a.dropdown-link").click(function(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    dd.hide(); 
    $(this).next().show(); 
    }); 

    $(document).click(function() { 
    dd.hide(); 
    }); 

    dd.click(function(e) { 
    e.stopPropagation(); 
    }); 
}); 
+0

Bạn không thể nhấp vào liên kết div mở để đóng lại với giải pháp của bạn. –

0

thấy fiddle này ...

http://jsfiddle.net/SDaCu/1/

+0

Điều này là sai bởi vì bạn không thể nhấp vào liên kết của div mở để đóng lại. –

+0

Yea thật kỳ lạ, nó không tiết kiệm được fiddle của tôi ... Tôi sẽ thêm câu lệnh kiểm tra vào ... –

0

Ở đây bạn đi:

$("a.dropdown-link", $dropdown).click(function(e) { 
    e.preventDefault(); 
    $(".dropdown-container").hide(); 
    $("div.dropdown-container", $dropdown).toggle(); 
    return false; 
}); 

Lưu ý dòng thêm:

$(".dropdown-container").hide(); 

Chúng tôi chỉ ẩn tất cả mọi thứ trước khi chuyển đổi div chúng tôi muốn.

+0

Sau đó, bạn không thể nhấp vào liên kết của một div mở để đóng lại. –

1

Hãy thử như sau:

$(document).ready(function(){ 

    $("a.dropdown-link").click(function(e) { 
    e.preventDefault(); 
    var $div = $(this).next('.dropdown-container'); 
    $(".dropdown-container").not($div).hide(); 
    if ($div.is(":visible")) { 
     $div.hide() 
    } else { 
     $div.show(); 
    } 
}); 

    $(document).click(function(e){ 
     var p = $(e.target).closest('.dropdown').length 
     if (!p) { 
      $(".dropdown-container").hide(); 
     } 
    }); 

}); 

DEMO

+0

Điều này làm việc cho tôi. Cảm ơn bạn. – mutiemule

0
$(document).ready(function(){ 

     $('div.dropdown').each(function() { 
     var $dropdown = $(this); 

     $("a.dropdown-link", $dropdown).click(function(e) { 
      e.preventDefault(); 
      $("div.dropdown-container").hide(); 
      if($("div.dropdown-container", $dropdown).hide()){ 
       $("div.dropdown-container", $dropdown).show(); 
      }else{ 
       $("div.dropdown-container", $dropdown).hide(); 
      } 
      return false; 
     }); 

    }); 

     $('html').click(function(){ 
     $("div.dropdown-container").hide(); 
     }); 

    }); 

http://jsfiddle.net/NFTFw/40/

+0

Bạn không thể nhấp vào liên kết div mở để đóng lại; kiểm tra '.hide()' trước và sau đó chuyển đổi tạm thời không giải quyết được vấn đề đó. –

2

tôi đã làm cho nó càng ngắn càng tốt! Chúc mừng mã hóa!

$(document).ready(function(){ 
    $(document).on("click", "a", function(event){ 
    $(this).siblings().show() 
    $(this).parent().siblings().each(function(index,element){ 
     $(element).find(".dropdown-container:visible").hide(); 
    }); 
    }); 
}); 

Demo: http://jsfiddle.net/NFTFw/60/

2

Bạn có thể sử dụng bằng cách thông minh và dễ dàng để thực hiện bằng cách sử dụng mã dưới đây:

<div id="dropdown-1" class="dropdown dropdown-processed"> 
    <a class="dropdown-link" href="#">Options</a> 
    <div class="dropdown-container" style="display: none;"> 
    <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
    </ul> 
    </div> 
</div> 

<div id="dropdown-2" class="dropdown dropdown-processed"> 
    <a class="dropdown-link" href="#">Options</a> 
    <div class="dropdown-container" style="display: none;"> 
    <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
    </ul> 
    </div> 
</div> 

<div id="dropdown-3" class="dropdown dropdown-processed"> 
    <a class="dropdown-link" href="#">Options</a> 
    <div class="dropdown-container" style="display: none;"> 
    <ul> 
     <li>Item 1</li> 
     <li>Item 2</li> 
     <li>Item 3</li> 
    </ul> 
    </div> 
</div> 

$(document).ready(function(){ 
 

 
$(".dropdown-link").click(function(){ 
 
$(".dropdown-container").slideUp('slow') 
 
$(this).closest('.dropdown').find('.dropdown-container').slideDown('slow'); 
 
    
 
}); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="dropdown-1" class="dropdown dropdown-processed"> 
 
    <a class="dropdown-link" href="#">Options</a> 
 
    <div class="dropdown-container" style="display: none;"> 
 
    <ul> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
    </ul> 
 
    </div> 
 
</div> 
 

 
<div id="dropdown-2" class="dropdown dropdown-processed"> 
 
    <a class="dropdown-link" href="#">Options</a> 
 
    <div class="dropdown-container" style="display: none;"> 
 
    <ul> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
    </ul> 
 
    </div> 
 
</div> 
 

 
<div id="dropdown-3" class="dropdown dropdown-processed"> 
 
    <a class="dropdown-link" href="#">Options</a> 
 
    <div class="dropdown-container" style="display: none;"> 
 
    <ul> 
 
     <li>Item 1</li> 
 
     <li>Item 2</li> 
 
     <li>Item 3</li> 
 
    </ul> 
 
    </div> 
 
</div>

Ví dụ làm việc Link: http://jsfiddle.net/NFTFw/1901/

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