Tôi có một menu thả xuống Bootstrap Twitter. Như tất cả người dùng Twitter Bootstrap đều biết, menu thả xuống đóng khi nhấp (thậm chí nhấp vào bên trong nó).
Để tránh điều này, tôi có thể dễ dàng đính kèm một trình xử lý sự kiện nhấp chuột trên menu thả xuống và chỉ cần thêm sự nổi tiếng event.stopPropagation()
.
<ul class="nav navbar-nav">
<li class="dropdown mega-dropdown">
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-list-alt"></i> Menu item 1
<span class="fa fa-chevron-down pull-right"></span>
</a>
<ul class="dropdown-menu mega-dropdown-menu">
<li>
<div id="carousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-slide-to="0" data-target="#carousel"></li>
<li class="active" data-slide-to="1" data-target="#carousel"></li>
</ol>
<div class="carousel-inner">
<div class="item">
<img alt="" class="img-rounded" src="img1.jpg">
</div>
<div class="item active">
<img alt="" class="img-rounded" src="img2.jpg">
</div>
</div>
<a data-slide="prev" role="button" href="#carousel"
class="left carousel-control">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a data-slide="next" role="button" href="#carousel"
class="right carousel-control">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</li>
</ul>
</li>
</ul>
Điều này có vẻ dễ dàng và là một hành vi rất phổ biến, tuy nhiên, và vì carousel-controls
(cũng như carousel indicators
) các trình xử lý sự kiện được ủy quyền cho document
đối tượng, click
sự kiện trên các phần tử này ( điều khiển trước / tiếp theo , ...) sẽ bị bỏ qua.
$('ul.dropdown-menu.mega-dropdown-menu').on('click', function(event){
// The event won't be propagated up to the document NODE and
// therefore delegated events won't be fired
event.stopPropagation();
});
Dựa vào Twitter hide
/ hidden
sự kiện thả xuống Bootstrap không phải là một giải pháp cho các lý do sau:
- Đối tượng sự kiện được cung cấp cho cả hai trình xử lý sự kiện không cung cấp tham chiếu đến phần tử được nhấp
- Tôi không có quyền kiểm soát nội dung trình đơn thả xuống nên việc thêm một
flag
lớp hoặc thuộc tính là không thể
Fiddle này là hành vi bình thường và fiddle này được event.stopPropagation()
thêm vào.
Cập nhật
Cảm ơn Roman cho câu trả lời của mình . Tôi cũng tìm thấy một câu trả lời mà bạn có thể tìm thấy dưới đây .
event propagation
đã dừng.