我有这个脚本:
<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()
能够处理尚未存在的元素,我错了吗?
感谢您的帮助!
答案 0 :(得分:0)
这很可能是由于委托方法的一个有趣属性。来自jQuery文档:
附加说明:
由于.live()方法在事件传播到文档顶部后处理事件,因此无法停止传播 现场活动。同样,.delegate()处理的事件也会传播 他们被委派的要素;事件处理程序绑定 DOM树下面的任何元素都已经被执行了 到调用委托事件处理程序时。这些处理程序, 因此,可能会阻止委托的处理程序触发 调用event.stopPropagation()或返回false。
模态对话框的close方法被附加在DOM的下方,并在你的身体处理程序之前被调用,并阻止你的处理程序正确触发。
尝试绑定到对话框的close event并删除那里的课程。