2012-09-07 5 views
17

Tôi có một trình đơn thả xuống twitter bootstrap bên trong div với plugin jOrgChart.Twitter tuyên truyền dừng bootstrap trên menu thả xuống mở

Sự cố tôi gặp phải là khi tôi nhấp vào nút để mở trình đơn thả xuống, nó cũng kích hoạt sự kiện nhấp chuột trong div cha mẹ sẽ làm sụp đổ các phần tử khác.

Đây là html của tôi:

<div id="chart"> 
<div class="node"> 
    <div class="btn-group"> 
     <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> 
     Actions 
     <span class="caret"></span> 
     </a> 
     <ul class="dropdown-menu" style="text-align:left;"> 
      <li><a href="#">Edit</a></li> 
      <li><a href="#">Delete</a></li> 
     </ul> 
    </div> 
</div> 

<div class="node"> 
... 
</div> 

tôi muốn ngăn chặn các nhấp chuột của a.dropdown-chuyển đổi từ bọt để div.node, tôi đã cố gắng với điều này:

$("div#chart div.btn-group > a.dropdown-toggle").click(function (e) { 
      e.stopPropagation(); 
     }); 

Nhưng bây giờ trình đơn thả xuống không hoạt động.

EDIT

Đây là trường hợp cụ thể: http://jsfiddle.net/UTYma/2/ (Nhờ Joe Tuskan để bắt đầu fiddle)

Trả lời

15
$("#orgchart").jOrgChart({ chartElement: '#chart' }); 

$("div#chart div.btn-group > a.dropdown-toggle, .dropdown-menu li a").click(function(e) { 
    e.stopPropagation(); 
    $('.dropdown-menu').toggle(); 
});​ 

Dừng Tuyên truyền rồi chuyển đổi. Example


Tôi phải thêm các mục trình đơn thả xuống vào trình xử lý nhấp chuột để giữ cho hành vi không đổi.

+0

Không, cách đó trình đơn thả xuống không hoạt động. – Escobar5

+0

http://jsfiddle.net/UTYma/ bạn có thể chỉnh sửa điều đó không, vì tôi không chắc bạn đang cố gắng làm gì. – Joe

+0

Tôi đã chỉnh sửa nó, biểu đồ div # bị thiếu, bạn có thể kiểm tra ngay bây giờ rằng trình đơn thả xuống không hoạt động – Escobar5

3

Hãy thử một cái gì đó như thế này:

$("div#chart div.btn-group > a.dropdown-toggle").click(function (e) { 

      e.isDropDownToggleEvent =true; 
}) 

Sau đó:

$("div.node").click(function (e) { 
    if (e.isDropDownToggleEvent != null && e.isDropDownToggleEvent) 
     return false; 

    return true;  
}) 

Yo bạn cũng có thể thử đặt e.preventDefault() hoặc e.stopPropagation(); thay vì trả về false.

+0

Điều là, với stopPropagation Tôi đã dừng sự kiện bubbling, vấn đề tôi có là bây giờ thả xuống không hoạt động hoặc. – Escobar5

+0

Tôi nhận ra rằng một vài giây trước, tôi đã cập nhật câu trả lời của mình. Ý tưởng cơ bản là để phát hiện khi nó nhấp vào sự kiện mà sôi sục từ chuyển đổi thả xuống và thực hiện công việc cho phù hợp. –

+0

nó phải là câu trả lời đúng. – Billybobbonnet

0

Nếu tôi hiểu chính xác, bạn muốn tránh menu đóng.

$("div#chart .dropdown-menu li").bind('click',function (e) { 
      e.stopPropagation(); 
     },false); 
+0

Không, tôi muốn menu hoạt động bình thường, tôi chỉ muốn khi người dùng nhấp vào nút để mở menu, sự kiện không phát sinh bong bóng (Vì div chứa menu cũng có sự kiện thu gọn các thành phần khác) – Escobar5

+0

Để rõ ràng, tôi đang sử dụng jOrgChart và tôi có trình đơn bên trong một nút: http://dl.dropbox.com/u/4151695/html/jOrgChart/example/example.html – Escobar5

1

tôi đã sử dụng

$('.multiselect').on('click', function (e) { 
    $(this).next('.dropdown-menu').toggle(); 
    e.stopPropagation(); 
}); 

này tương tự như @ câu trả lời của Joe, nhưng một chút chung chung hơn

1
$("div#chart div.btn-group > a.dropdown-toggle, .dropdown-menu li a").click(function(e) { 
    e.stopPropagation(); 
    $(this).closest('.dropdown').toggleClass('open'); 
});​ 

Bạn nên sử dụng này để thay thế như trên giải pháp không đóng menu thả xuống tập trung.