繁体   English   中英

在点击事件中分配点击事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM