2015-06-02 16 views
7

tôi đang gặp khó khăn để tìm thấy những yếu tố neo nhấp trong trường hợp sụp đổ sử dụng Bootstrap 3.3.4 .:Làm thế nào để có được yếu tố được nhấp trong sự kiện thu gọn Bootstrap?

$('.collapse').on('show.bs.collapse', function (e) { 
    // Get clicked element that initiated the collapse... 
}); 

tôi cần điều này vì tôi muốn để ngăn chặn sụp đổ nếu các yếu tố nhấp có một thuộc tính dữ liệu nhất định . Một tùy chọn khác sẽ là móc vào bằng cách sử dụng .on('click', function()), tuy nhiên có các sự kiện khác xảy ra khi nhấp cần chạy vì vậy điều này dường như không xảy ra với tôi. Tìm kiếm trong DOM cho neo gần nhất hoặc một cái gì đó tương tự sẽ không hoạt động tốt vì có nhiều neo bên cạnh eachother.

+0

xin lỗi. Không thể tìm ra số – AmmarCSE

+0

** http: //jsfiddle.net/sheshu036/8s0mn0f4/5/** như cách này bạn có nhiều thẻ liên kết? – sheshadri

+0

Các neo được đặt ở một nơi khác trên trang, tất cả cạnh nhau (bỏ qua cấu trúc HTML Boostrap mặc định). – Propaganistas

Trả lời

4

Kể từ trường hợp của tôi đặc trưng nhiều neo cạnh eachother (tức là không tuân thủ cấu trúc Bootstrap thông thường.), Tôi đã kết thúc tìm kiếm neo nhấp bằng cách sử dụng ID div sụp đổ của:

$('.collapse').on('show.bs.collapse', function (e) { 
    // Get clicked element that initiated the collapse... 
    clicked = $(document).find("[href='#" + $(e.target).attr('id') + "']") 
}); 
+0

Điều này sẽ không hoạt động nếu mục tiêu trong href được đặt làm lớp – redrobot

2

này nên làm việc: http://jsfiddle.net/8s0mn0f4/3/

console.log($(e.target).siblings('.panel-heading').find('a')) 
+0

Có nhiều neo bên cạnh nhau. Tôi chỉ cần một nhấp chuột. – Propaganistas

+1

Sau đó, có thể viết trình nghe nhấp chuột của riêng bạn trên các liên kết và không sử dụng API khởi động –

0

giải pháp này vòng tất cả các neo sụp đổ và tìm kiếm các mục tiêu href. Nó sẽ làm việc cho cả hai tham chiếu bởi #id và theo .class

Trong ví dụ này, tôi sử dụng nó để thêm lớp đã thu gọn vào phần tử được nhấp.

$(document).ready(function() { 
     checkCollapsed(); 
    }) 

    function checkCollapsed() { 
     $('.collapse').on('shown.bs.collapse', function (e) { 
      triggerCollapsedClass(); 
     }).on('hidden.bs.collapse', function (e) { 
      triggerCollapsedClass(); 
     }); 
    } 

    function triggerCollapsedClass() { 
     $("[data-toggle=collapse]").each(function (i, item) { 
      var selector = $(item).attr("href"); 
      if ($(selector).hasClass("in")) { 
       $(item).addClass("collapsed"); 
      } else { 
       $(item).removeClass("collapsed"); 
      } 
     }) 
    } 
7

Hãy thử điều này

$element.on('shown.bs.collapse', function(e) { 
    var $clickedBtn = $(e.target).data('bs.collapse').$trigger; 
}); 
+1

Đây là câu trả lời đúng và sẽ hoạt động bất kể tài liệu có cấu trúc. –

+1

Điều này chỉ hoạt động cho sự kiện 'shown.bs.collapse'. Không phải cho 'show.bs.collapse' vì dữ liệu không được đặt tại thời điểm đó. – dtrunk

0

Khi bootstrap của đám cháy sụp đổ, và một phần tử div được thể hiện đẳng cấp của nó trở nên panel-collapse collapse in.

Tôi cần điều này để tôi có thể chuyển nội dung ajax vào bảng mới được mở. Bạn có thể thêm thuộc tính id hoặc data- vào phần tử đó có thể giúp xác định neo.

HTML

<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapse-X" aria-expanded="true" aria-controls="accordion-x" id="accordionanchor-X"> 
Information X 
</a> 
… 
<div id="collapse-x" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="pageheading-X"> 
    <div class="panel-body"> 
    … 
    </div> 
</div> 

Javascript

$('.collapse').on("shown.bs.collapse", function (e) { 
    var clicked = $(".panel-collapse.collapse.in").attr("id"); 
    alert("collapse " + clicked); 
}); 
Các vấn đề liên quan