[英]Assign click event inside click event
在一个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-如果有帮助:)
这可能是一个冒泡的问题。 首次点击事件的源元素是否在文档内? (或者是文档,还是第二单击事件处理程序?)
事件一直到容器一直到文档。 如果您正在处理图像或其他事件,然后在链上某个事件上设置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
当您的第一个单击处理程序完成时,单击事件只会传递到队列中的下一个侦听器(称为冒泡),因为您不会阻止事件传播。 这意味着在Your click handler
返回后,您将遇到以下情况:
New click handler <-- currently executing
Your click handler
...
System click handler 2
System click handler 1
$(document).click(function(){
alert('here')
$('.mini-menu').hide();
$(document).unbind('click')
})
这实际上将单击绑定到文档,因此,文档中任何位置的任何单击都会激活此操作。
我需要更多信息,以便甚至可以隔离出您真正想做的事情。
编辑:仅添加一些信息,您可能希望在事件旁边返回FALSE,以防止事件传播(冒泡)文档并停止。 学习jQuery的事件处理文档,以获得与您的情况相关的更切实的结果。
EDIT2:解释一下,当您在此处绑定DOCUMENT时,一旦函数完成,文档仍然具有该事件,然后在那个时候(在函数之后)将其激活...我希望我对此进行解释,这样才有意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.