Javascript 元素';s onClickOff()事件提前激发

Javascript 元素';s onClickOff()事件提前激发,javascript,jquery,html,css,events,Javascript,Jquery,Html,Css,Events,我很确定这不是重复的,因为我在别处找不到这个问题,或者无法描述它 我有一个小函数onClickOff(),它临时创建一个事件,当您在定义的元素外部单击时,该事件会运行一些代码。这很好,问题是当你点击按钮运行函数时,它也会在我不想要的其他元素之外注册点击 尝试单击代码段中的按钮以了解我的意思-我希望在单击按钮时不会出现消息,而是在单击按钮后单击红色div外部时出现消息 添加:我不想使用event.stopPropagation()这会更改我使用的元素中的功能 div.click1{ 宽度:100

我很确定这不是重复的,因为我在别处找不到这个问题,或者无法描述它

我有一个小函数
onClickOff()
,它临时创建一个事件,当您在定义的元素外部单击时,该事件会运行一些代码。这很好,问题是当你点击按钮运行函数时,它也会在我不想要的其他元素之外注册点击

尝试单击代码段中的按钮以了解我的意思-我希望在单击按钮时不会出现消息,而是在单击按钮后单击红色div外部时出现消息

添加:我不想使用
event.stopPropagation()这会更改我使用的元素中的功能

div.click1{
宽度:100px;
高度:100px;
背景:红色;
}

函数onClickOff(选择器,func){
$(文档).unbind('click.onOffClick touch start.onOffClick').bind('click.onOffClick touch start.onOffClick',函数(e){
如果($(e.target).closest(选择器).length==0){
func();
$(文档).unbind('click.onOffClick touch start.onOffClick');
}
});
}
单击1
$('body')。在('click','button.click1',function()上{
onClickOff('div.click1',函数(){
警报(“你点击了广场!”);
})
});

单击按钮后,您需要停止事件传播:

div.click1{
宽度:100px;
高度:100px;
背景:红色;
}

函数onClickOff(选择器、事件、函数){
event.stopPropagation();
$(文档).unbind('click.onOffClick touch start.onOffClick').bind('click.onOffClick touch start.onOffClick',函数(e){
如果($(e.target).closest(选择器).length==0){
func();
$(文档).unbind('click.onOffClick touch start.onOffClick');
}
});
}
单击1
$('body')。在('click','button.click1',函数(e)上{
//e、 停止传播();
onClickOff('div.click1',e,function(){
警报(“你点击了广场!”);
})
});

是否使用一个变量来计算函数已被执行的次数?例如,您可以创建一个名为count的变量,并在单击按钮运行函数时使count的值等于0。然后在另一个函数中,只需将count的值加1,然后使用if语句检查count的值是否大于1。如果是,则运行代码。可能有一种更干净的方法来实现这一点,但这可以解决您的问题。

是否有一种方法可以在
onClickOff()中实现这一点
函数?您可以将事件传递到函数并在函数中取消它…我将编辑它作为替代方案。我现在将使用此选项,如果没有其他选项,我将接受您的答案!