见下我的链接:
如果单击test.php中的链接,它将在一个使用jquery'facebox'脚本的模式框中打开。
我正在尝试对此框中的点击事件采取行动,如果你查看test.php的来源,你会看到我试图在模态框中找到链接。
$('#facebox .hero-link').click(alert('click!'));
但是,它没有检测到点击,奇怪的是,当页面加载时,click事件会运行。
然后关闭按钮会内置一个关闭框的点击事件,我怀疑我的本土点击事件是以某种方式被阻止的,但我无法理解。
有人可以帮忙吗?通常情况下,它是项目的最后一部分,它始终如一地阻止我;)
答案 0 :(得分:9)
首先,您获取文档加载警报的原因是#click
方法将函数作为参数。相反,您传递了alert
的返回值,它立即显示警告对话框并返回null。
事件绑定不起作用的原因是因为在文档加载时,#facebox .hero-link
尚不存在。我认为你有两个选项可以帮助你解决这个问题。
选项1)仅在显示facebox后才绑定click事件。类似的东西:
$(document).bind('reveal.facebox', function() {
$('#facebox .hero-link').click(function() { alert('click!'); });
});
选项2)查看使用jQuery Live Query Plugin
Live Query利用jQuery选择器的强大功能,通过绑定事件或自动神奇地触发匹配元素的回调,即使在页面加载和DOM更新后也是如此。
jQuery Live Query会在识别出Facebox修改DOM时自动绑定click事件。那么你应该只写这个:
$('#facebox .hero-link').click(function() { alert('click!'); });
答案 1 :(得分:1)
或者使用事件委托
这基本上将事件挂钩到容器而不是每个元素,并在容器事件中查询event.target。
它有多种好处,因为您可以减少代码噪音(无需重新绑定),它在浏览器内存上也更容易(在dom中绑定的事件更少)
快速示例here
jQuery plugin便于事件委派
P.S事件授权很快就会出现在下一个版本(1.3)中。