在onclick事件中,我正在绑定另一个onclick事件。但是当我发起第一个事件时,第二个事件总是执行:
var MiniMenu = {
show : function(menu_id, element){
// this doesn't have any thing to do with the problem - I think
position = $(element).offset();
$('#' + menu_id).css({
left : position.left,
top : position.top + 13
}).show();
// Why is this event called on the first click,
// even though it isn't bound at that time?
$(document).click(function(){
alert('here')
$('.mini-menu').hide();
$(document).unbind('click')
})
}
}
我正在使用Adobe Air - 如果有帮助:)
答案 0 :(得分:1)
这可能是一个冒泡的问题。第一个单击事件的源元素是文档内部的内容吗? (或者它是文档,第二次单击事件处理程序也是如此?)
事件一直向容器冒泡到文档。如果你正在处理图像上的事件,然后在链上的某些东西上设置click事件处理程序,那么它可能会在之后被触发。
答案 1 :(得分:1)
我猜因为点击事件只是起泡; - )
请考虑以下事项:您有一堆事件处理程序分配给click事件,可能大多数事件处理程序在您不知道它们存在的情况下
Your click handler <-- currently executing
...
System click handler 2 <-- already finished
System click handler 1
现在,在执行时,您的点击处理程序会为此事件添加另一个侦听器。
New click handler
Your click handler <-- currently executing
...
System click handler 2
System click handler 1
当您的第一个单击处理程序完成时,click事件将被传递给队列中的下一个侦听器(这称为冒泡),因为您不会阻止事件传播。这意味着在Your click handler
返回后,您会遇到以下情况:
New click handler <-- currently executing
Your click handler
...
System click handler 2
System click handler 1
答案 2 :(得分:0)
$(document).click(function(){
alert('here')
$('.mini-menu').hide();
$(document).unbind('click')
})
这实际上将点击绑定到文档,因此任何单击文档中的任何内容都会导致此操作被激活...
我需要更多信息才能隔离你真正想做的事情。
编辑:只是为了添加一些信息,您可能希望返回FALSE端事件以防止事件传播(冒泡)文档并停止。研究jQuery的事件处理文档,以获得与您的情况相关的更实际的结果。
EDIT2:解释一下,当你在这里绑定DOCUMENT时,一旦函数完成,文档仍然有事件,然后在那个时候激活它(在函数之后)...我希望我解释这个,所以它使感。