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

时间:2010-01-31 02:35:47

标签: javascript jquery

在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 - 如果有帮助:)

3 个答案:

答案 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时,一旦函数完成,文档仍然有事件,然后在那个时候激活它(在函数之后)...我希望我解释这个,所以它使感。