在“Facebox”框中找到元素

时间:2008-12-08 17:32:05

标签: javascript jquery facebox

见下我的链接:

http://tinyurl.com/6j727e

如果单击test.php中的链接,它将在一个使用jquery'facebox'脚本的模式框中打开。

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

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

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

然后关闭按钮会内置一个关闭框的点击事件,我怀疑我的本土点击事件是以某种方式被阻止的,但我无法理解。

有人可以帮忙吗?通常情况下,它是项目的最后一部分,它始终如一地阻止我;)

2 个答案:

答案 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)中。