0

我有这个脚本:

<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.block-link

脚本的第一部分正在工作,第二部分应该.gallery-on从正文中删除类,但它只是关闭灯箱并让正文类在它所在的位置。

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

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

谢谢你的帮助!

4

1 回答 1

0

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

补充说明:

由于 .live() 方法在事件传播到文档顶部后处理事件,因此无法停止实时事件的传播。同样,由 .delegate() 处理的事件将传播到它们被委托的元素;在调用委托的事件处理程序时,绑定在 DOM 树中它下面的任何元素上的事件处理程序将已经被执行。因此,这些处理程序可能会阻止委托处理程序通过调用 event.stopPropagation() 或返回 false 来触发。

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

尝试绑定到对话框的关闭事件并删除那里的类。

于 2012-10-31T23:45:08.580 回答