2013-08-07 82 views
1

一個簡單的問題:在事件不起作用

當我使用

$(document).on('click', '.btn-del-top', function(e) {}) 

everyhing工作,但如果我用

$('.btn-del-top').on('click', function(e) {}) 

什麼work.Is有一些解釋?

+1

請勿在您的問題標題中添加標籤。 **不要**將代碼放在代碼塊中。 –

+2

可以有幾十個解釋...你的代碼在哪裏?你有'$(document).ready();'中的代碼嗎? DOM完成後,是否加載了.btn-del-top? – Zim84

+0

你能解釋一下你想達到什麼嗎? – fmgp

回答

3

這可能是因爲btn-del-top元素是動態創建的,或者是在$('.btn-del-top').on('click', function(e) {})代碼執行後創建的。

Demo1:在這種情況下,它不工作,因爲代碼不是內部DOM準備

+0

是的,但據我所知現在替換現場如此它必須工作還是? – Momo1987

+1

@ Momo1987 no ...只有一個'on()'的格式是'live()'的替換,這個是工作的 –

+0

啊ok ok thanx的信息,所以對於動態創建的元素iI需要使用$ (document).on('click','.btn-del-top',function(e){}),對嗎? – Momo1987

0

主要的原因是,當你運行第二個代碼片段,這些元素都還不存在,所以他們AREN沒有發現,所以他們沒有迷上。第一個代碼片段在看到document(例如,可能晚得多)的點擊之前不會查找它們。

原因他們都沒有發現可能會有所不同:

  1. 如果你的代碼,尋找他們是在腳本標記他們在HTML定義,其中以上,他們不會存在。例如:

    <!-- Won't work, the element doesn't exist when you look for it --> 
    <script> 
    $('.btn-del-top').on('click', function(e) {}) 
    </script> 
    <span class="btn-del-top">...</span> 
    

    但是:

    <!-- Will work, the element exists when you look for it --> 
    <span class="btn-del-top">...</span> 
    <script> 
    $('.btn-del-top').on('click', function(e) {}) 
    </script> 
    

    和:

    <!-- Will work also work, jQuery will call your code later when 
        all elements in the markup have been created --> 
    <script> 
    $(function() { // shortcut for `$(document).ready(...)` 
        $('.btn-del-top').on('click', function(e) {}) 
    }); 
    </script> 
    <span class="btn-del-top">...</span> 
    
  2. 如果使用代碼創建它們,他們將不早當您嘗試勾存在他們了。

0

如果您要動態添加.btn-del-top,則第二個在該元素存在之前綁定,因此它不綁定。