2010-05-09 70 views
3

我現在所擁有的這樣的代碼:當添加一個li時,它是否成爲ul的一部分「真實」?

<ul><li class="listitem">text<li></ul> 

的jQuery:

$('.listitem').click(function() { 
    $("#elname").text($(this).text()); 
    $('#slists').css('visibility','hidden') 
    $('#elname').css('visibility','visible') 
    $('#elname').css('display','inline-block') 
}); 

據說這是爲了隱藏一個div和它,但是當我追加的項目到UL(用類列表項)附加項目沒有任何反應,它得到的類是正確的,標題和值也是如此。

這可能與上面的代碼在文檔準備功能中有關嗎?

+0

你能否澄清你在做什麼,並顯示有問題的實際代碼?你在追加什麼東西? – 2010-05-09 13:40:39

回答

11

使用.live()代替,就像這樣:

$('.listitem').live('click', function() { 
    $("#elname").text($(this).text()) 
       .css({ visibility:'visible', display: 'inline-block' }); 
    $('#slists').css('visibility','hidden') 
}); 

.live()監聽在document級別爲您的點擊冒泡......與新老元素泡本次活動以同樣的方式,所以也沒有請注意稍後添加的內容,因爲您的.click()處理程序將點擊綁定到選擇器運行時存在的元素

或者,你可以給你<ul> ID或類,並使用.delegate()這樣的:

$('#myUL').delegate('.listitem', 'click', function() { 
    $("#elname").text($(this).text()) 
       .css({ visibility:'visible', display: 'inline-block' }); 
    $('#slists').css('visibility','hidden') 
}); 

這導致更少的氣泡,所以只是有點對事件邊整潔,它抓住了它在<ul>而不是在document上的所有方式。

+0

感謝您的詳細解釋!和更好的編碼:)! – Noor 2010-05-09 13:53:28

+0

@Noor - Welcome :)另一個提示是,除非你需要這些隱藏的元素來隱藏空間,你可以使用'display'而不是'visibility',只需調用'.show()'和'.hide )'快捷方式。 – 2010-05-09 13:55:49

7

點擊事件在設置時在DOM中的所有元素上設置一次。添加列表項目不會重新生成這些點擊項目。

您需要使用jQuery的live event functionality來創建適用於即時創建的元素的點擊事件。

+0

謝謝!所以我理解它部分正確:)!非常好的解釋,並鏈接! – Noor 2010-05-09 13:42:53

相關問題