当我点击实际弹出框之外的任何地方时,我试图隐藏引导弹出窗口。我在这个帖子中尝试了解决方案:
How to dismiss a Twitter Bootstrap popover by clicking outside?
但它似乎并不适用于我的情况(它只是阻止任何弹出窗口产生)。我认为这是因为在我的代码中,生成弹出窗口的链接是从页面动态添加/删除的,搞乱了事件监听器。
这是我的HTML:
<div id="item-model">
<div class="activity-col">
<div class="form-group col-xs-5">
<select name="activity_x" id="activity-x" class="form-control">
<option value=""></option>
<option value="1">Item 1</option>
<option value="2">Item 2</option>
</select>
</div>
</div>
<div class="vocab-col">
<span class="vocab-setting">Random</span>
<a href="#" class="glyphicon glyphicon-pencil edit-btn" title="" data-original-title="Edit"></a>
</div>
<div class="phonics-col">
<span class="phonics-setting">Selected</span>
<a href="#" class="glyphicon glyphicon-pencil edit-btn" title="" data-original-title="Edit"></a>
</div>
<a href="#" class="glyphicon glyphicon-remove del-btn" title="" data-original-title="Remove" data-content="<button type='button' class='btn btn-primary'>Remove</button> <br /> <button type='button' class='btn btn-default'>Cancel</button>"></a>
</div>
<ol>
<li>
<div class="activity-col">
<div class="form-group col-xs-5">
<select name="activity_0" id="activity-0" class="form-control">
<option value=""></option>
<option value="1">Item 1</option>
<option value="2">Item 2</option>
</select>
</div>
</div>
<div class="vocab-col">
<span class="vocab-setting">Random</span>
<a href="#" class="glyphicon glyphicon-pencil edit-btn" title="" data-original-title="Edit"></a>
</div>
<div class="phonics-col">
<span class="phonics-setting">Selected</span>
<a href="#" class="glyphicon glyphicon-pencil edit-btn" title="" data-original-title="Edit"></a>
</div>
</li>
</ol>
和javascript:
/* popover generation
--------------------*/
$('body').popover({
html: true,
placement: 'top',
selector: '.del-btn',
});
/* make new list item
--------------------*/
$('.lesson.new ol').on('change blur', 'select:last', function() {
var $last_select = $(this);
if($last_select[0].selectedIndex !== 0) {
var $ol = $('.lesson.new ol');
var $li_content = $('#item-model').clone();
$ol.append('<li></li>');
var $last_li = $ol.children('li:last');
$last_li.css({ opacity: 0 });
$last_li.append($li_content.html());
$last_li.animate({opacity : 1 }, { duration: 300 });
}
});
现在发生的事情是,当您在列表的最后一个选择框中选择一个项目时,它会自动在底部生成一个新的列表项。单击删除按钮(.del-btn)时,会出现一个弹出窗口进行确认。我想要发生的是如果你在弹出窗口外面点击,我想要隐藏当前打开的弹出窗口。如果在弹出窗口仍处于打开状态时单击另一个删除按钮,则应关闭第一个弹出窗口并打开新窗口。
答案 0 :(得分:1)
这应该为你做。评论应该解释它是如何运作的。
//register an event handler for the entire body of the document
$('body').click(function (event) {
//find the element that dispatched the event
var clicktarget = $(event.target);
//make sure that the element that dispatched the event was NOT the .del-btn
if (!clicktarget.hasClass('del-btn')) {
//if ANY element on the body dispatched the event other than the .del-btn
//hide any open popovers
$('.del-btn').popover('hide');
}
});
答案 1 :(得分:-1)
刚才我读了很棒article为什么永远不要使用event.stopPropagation()
。值得一读。