2008-12-08 72 views
4

我的继承人链接:在“Facebox”框查找元素

http://tinyurl.com/6j727e

如果单击test.php的链接,它在其中使用jQuery“facebox”一个模式对话框打开脚本。

我想在此框中点击事件采取行动,如果你查看test.php的来源,你会看到我试图loacte模态对话框中的链接。

$('#facebox .hero-link').click(alert('click!')); 

但是,它并没有检测到点击奇怪的是click事件运行在页面加载时。

的关闭按钮但是都内置了一个click事件关闭对话框,我怀疑是被阻止我家种植的单击事件莫名其妙,但我无法弄清楚。

任何人都可以帮忙吗?通常,它是项目的最后一部分,它始终如一地支持我;)

回答

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

实况查询通过结合事件或解雇的回调匹配的元素自动神奇,即使在利用jQuery选择的力量该页面已被加载并更新了DOM。

当jQuery Live Query识别Facebox修改DOM时,会自动绑定click事件。然后,您应该只需要这样写:

$('#facebox .hero-link').click(function() { alert('click!'); }); 
+0

小心实况查询,可以吃你的Web应用程序,如果你有大十岁上下的DOM,事件代表团一个更好的选择,并没有额外的插件开销。 – redsquare 2008-12-08 19:38:39

+0

选项1为我做了诡计;)非常感谢。 – 2008-12-09 09:16:18

1

或者使用事件代表团

这基本上挂钩事件到容器,而不是每一个元素,并查询容器事件的event.target。

它在你减少代码的噪音(无需重新绑定),它也是浏览器的内存更容易多重利益(较少的事件在DOM绑定)

快速例如here

jQuery plugin方便事件代表团

PS事件代表团被写入下一个版本(1.3),很快即将到来。