.一个事件一次又一次地被解雇
.on event keeps getting fired over and over again
我试图设置一个事件,它在我的元素打开后触发。我有一个工具提示和一个click事件来显示工具提示。当这种情况发生时,我设置了一个文档点击事件,如果用户点击舞台上的任何地方,它就会删除所有的工具提示。但它在工具提示显示之前就被调用了。它一遍又一遍地触发文档事件。
$('.container img').popover({placement:'top', trigger:'manual', animation:true})
.click(function(evt){
evt.preventDefault();
el = $(this);
if(el.hasClass('active')){
el.popover('hide');
}else{
clearDocumentEvent();
el.popover('show');
$(document).on('click.tooltip touchstart.tooltip', ':not(.container img)', function(){
hideAllTooltips();
});
}
el.toggleClass('active');
})
var hideAllTooltips = function(){
$('.container img').popover('hide');
$('.container img').removeClass('active');
}
var clearDocumentEvent = function(){
$(document).off('click.tooltip touchstart.tooltip');
};
问题源于事件冒泡。您可以通过执行以下测试来验证这一点:
$(document).on('click.tooltip touchstart.tooltip', ':not(.container img)', function(){
//hideAllTooltips();
console.log($(this)); // will return .container, body, html
});
尝试使用event.stopPropogation()
:
$(document).on('click.tooltip touchstart.tooltip', ':not(.container img)', function(e){
e.stopPropagation();
hideAllTooltips();
});
演示:http://jsfiddle.net/dirtyd77/uPHk6/8/
注:我建议从on
函数中删除.tooltip
,如
$(document).on('click touchstart', ':not(.container img)', function(){
e.stopPropagation();
hideAllTooltips();
});
相关文章:
- 一次又一次地在新的和相同的选项卡中打开一个url
- 如何初始化一次并将相同的值一次又一次地传递给另一个函数
- 流星回拨天堂回拨一次又一次
- 一次又一次地调用功能
- 如何阻止网页在到达底部后一次又一次地自动滚动
- 杜兰达尔 2.0.1,尝试激活一次又一次地被调用
- 在滚动时没有获取新数据,而是在滚动时一次又一次地添加相同的 json 数据
- 如何修复此代码以显示 10 秒并一次又一次地永远隐藏 10 秒
- 可以一次又一次地使用 ng 重复吗?
- 为什么警报框一次又一次地出现
- 如何在HTML5网页中本地保存数据,这样我们就不需要一次又一次地从服务器获取
- jQuery一次又一次地调用该函数
- 使用 JavaScript 一次又一次地在画布上编写文本
- Ajax Authorization Request标头一次又一次地失败
- 将相同的选项一次又一次地传递给jQuery函数
- 使用JQuery'加载HTML;s在一次又一次地删除HTML后多次执行getScript
- AJAX一次又一次地加载iFrame
- .一个事件一次又一次地被解雇
- 我是不是在这个jQuery代码中一次又一次地绑定事件
- 事件(单击)如何通过另一次单击一次又一次地触发