脚本生成元素上的jquery click事件

时间:2012-10-31 23:29:53

标签: javascript jquery dom onclick

我有这个脚本:

<script>
    $(document).ready(function() {
       $('.block-link').click(function() {
          $('body').addClass("gallery-on");
       });

       $('body').delegate('.ps-toolbar-close', 'click', function() {
          $('body').removeClass("gallery-on");
          });
       });
</script>

当我点击任何.gallery-on时,该脚本应该将body课程添加到.block-link
.ps-toolbar-close元素是通过plugin(相当不错的顺便说一句!)生成的,在点击任何.block-link时会创建模态灯箱。

脚本的第一部分正在工作,第二部分应该从正文中移除.gallery-on类,但它只是关闭灯箱并让body类放在原处。

我做错了什么?不幸的是,我是javascript和jquery的初学者..

我最好的猜测是,由于页面加载时文档中尚未显示.ps-toolbar-close,因此不会为脚本的第二部分放置点击处理程序,但我认为.delegate()能够处理尚未存在的元素,我错了吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这很可能是由于委托方法的一个有趣属性。来自jQuery文档:

  

附加说明:

     

由于.live()方法在事件传播到文档顶部后处理事件,因此无法停止传播   现场活动。同样,.delegate()处理的事件也会传播   他们被委派的要素;事件处理程序绑定   DOM树下面的任何元素都已经被执行了   到调用委托事件处理程序时。这些处理程序,   因此,可能会阻止委托的处理程序触发   调用event.stopPropagation()或返回false。

模态对话框的close方法被附加在DOM的下方,并在你的身体处理程序之前被调用,并阻止你的处理程序正确触发。

尝试绑定到对话框的close event并删除那里的课程。