2013-08-07 177 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,则第二个在该元素存在之前绑定,因此它不绑定。