我如何绑定一个JQuery事件,使它只触发一次
How can I bind a JQuery event to make it only fire once?
我有一个帮助弹出窗口,我想关闭时,其他地方点击。我有:
$('.help[data-info]').click(function(){
$('.info[a complicated selector]').toggle(400);
$('*:not(.info[the complicated selector]).one('click','',function(){
.info[the complicated selector].hide(400);
});
})
但是one()不是我想要的,在它为页面上的每个元素触发之前。我只想让它发射一次
它看起来像你是附加事件处理程序到每个元素在你的dom除了帮助弹出?嗯…
这个怎么样:
创建一个单独的"mask"div,覆盖整个屏幕,但是是透明的(不透明度:0.0)。附加点击事件处理程序仅到遮罩div。然后打开覆盖div顶部的信息div。单击页面上的任何地方,除了信息div,事件将被遮罩div捕获,然后再到达它下面的任何东西。在事件处理程序中,hide() infodiv,并删除maskdiv。在测试/试验这一点时,从部分不透明的蒙版开始,而不是完全透明的。
使用布尔变量并在第一次点击后将其设置为true,这样它就不会再次触发动作:
$('.help[data-info]').click(function() {
var clicked = false;
$('.info[a complicated selector]').toggle(400);
$('*:not(.info[the complicated selector]').one('click','',function() {
if (!clicked) {
.info[the complicated selector].hide(400);
clicked = true;
}
});
})
几个选项:
- 你可以使用模糊事件,而不是绑定一个点击事件,除了你的弹出。
- 在弹出窗口和页面的其余部分之间添加透明的全页
div
。在透明div
上的点击事件可以处理隐藏。
如果您只想在所有元素中触发一次,那么您可能必须在单击任何一个事件处理程序时手动取消绑定所有事件处理程序或使用标志:
$('.help[data-info]').click(function(){
$('.info[a complicated selector]').toggle(400);
var sel = $('*:not(.info[the complicated selector]);
function hideInfo() {
.info[the complicated selector].hide(400);
sel.unbind('click', hideInfo);
}
sel.bind('click', hideInfo);
})
相关文章:
- 引导程序崩溃一次只能看到一个
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- 一次又一次地在新的和相同的选项卡中打开一个url
- jQuery .each 循环一次一个
- 触发双重功能,一次一个
- 欧芹JS - 一次一个错误
- jQuery fadeIn 元素一次一个 onClick
- javascript循环需要显示隐藏列表onclick一次一个
- 在网格视图内(单击时标签转到文本框)一次一个
- 使用单个输入元素上传多个文件(不是多个选择,而是一次一个)
- CSS:折叠导航,一次一个元素
- 如何一次一个滚动绘制每个SVG路径(按时间顺序)
- Javascript切换(一次一个)
- Javascript的多个元素相同的函数,一次一个
- 如何一次一个地淡入和淡出列表中的一个项目
- 一次一个警报
- 一次一个地通过一系列函数传递ID
- 切换多个图像时,单击,但一次一个
- Phonegap媒体插件一次一个声音
- Jquery循环通过列表时,按下键一次一个