簡體   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