2013-09-23 55 views
0

我試着去重寫事件委派以下功能:JavaScript事件代表團

$("ul > li.closed").click(function (e) { 
    if (e.target === this) { 
     var li = $(this).closest('li'); 
     li.find(' > ul').slideToggle('fast'); 
     $(this).toggleClass("closed open"); 
    } 
}); 

其他所有的功能我已經重寫完美運行,但是這一次沒有。這是我寫的:

$(document).on("click", "ul > li.closed", function (e) { 
    if (e.target === this) { 
     var li = $(this).closest('li'); 
     li.find(' > ul').slideToggle('fast'); 
     $(this).toggleClass("closed open"); 
    } 
}); 

正如你所看到的,我並沒有真正改變很多。 ul打開,但不再關閉。我的錯誤在哪裏?

+0

嘗試'$(「UL」)。 on(「click」,「li.closed」,function(e){' – karthikr

回答

3

的問題是,一旦li被打開,類closed被移除並且open添加,這意味着選擇li.closed不匹配

在選擇器被懶惰地評估事件代理的情況下,但在正常事件處理的處理程序的情況下,在事件註冊時登記的目標元素所以當時它曾經元素有類closed將得到處理

$(document).on("click", "ul > li:has(ul)", function (e) { 
    var li = $(this).toggleClass("closed open"); 
    li.children('ul').slideToggle('fast'); 
}); 
+0

爲什麼這應該有所作爲? –

+1

@FelixKling剛剛更新 –

+0

這會打開li並直接關閉它。只有在另一次點擊後,其行爲纔像預期的那樣 – sqe