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