2011-10-18 41 views
0

我想绑定一个函数来关闭特定的facebox?根据facebox(at github)的有限文档,你可以做这样的事情来绑定动作。我可以将动作绑定到特定的facebox吗?

$(document).bind('close.facebox', function() { 
    //do stuff... 
}) 

但问题在于它会将相同的操作绑定到页面上创建的所有facebox。

那么如何将不同的功能绑定到不同的facebox?我曾尝试没有成功(可能是由于我的JavaScript的尚未masterlevelskills和jQuery)的几个变种:​​

  • 绑定一个通用的函数所建议的文件,并在功能弄清楚什么facebox被关闭,并执行想要的东西。
  • 获取创建时句柄facebox并使用绑定的动作:

    var fb = $.facebox('foo'); 
    fb.bind('close.facebox', function() { ...do stuff ...}) 
    
  • 调用bind在facebox直接,如:

    $.facebox('foo').bind('close.facebox', function() { ...do stuff ...}) 
    
  • ,我不记得大概更多的变种...

请帮我理解我应该怎么做(或为什么我笑)没有试图做到这一点)。 (!)

回答

1

快速看一下我能想到一个黑客的来源后,使这项工作:

  1. 覆盖的facebox#close方法与你自己的。
  2. 此方法的范围将允许您访问刚刚点击过的“关闭”链接
  3. 现在,您可以横向“横向”浏览您的内容并使用它。一个数据属性或类名来标识你当前正在显示哪个盒子
  4. 基于这个,你可以做出一个决定该怎么做。

下面是一个例子:

HTML:

<a href="#foo" class="facebox">Foo</a> 
<a href="#bar" class="facebox">Bar</a> 
<div id="foo"> 
    <div data-close="foo">Foo</div> 
</div> 
<div id="bar"> 
    <div data-close="bar">Bar</div> 
</div> 

JS:

$.facebox.close = function(e) { 
    var type = $(this).prev().find('div:first').data("close"); 
    switch (type) { 
    case "foo": 
     alert("FOO"); 
     break; 
    case "bar": 
     alert("BAR"); 
     break; 
    } 
    $(document).trigger('close.facebox'); 
    return false 
}; 

$('a.facebox').facebox(); 

这里试试:http://jsfiddle.net/SU3se/

我相信这个插件假设你不会在多个“不同”对象上使用它,并且由于你有时只能打开一个facebox,所以这个“应该”不是问题。但我明白为什么有人可能想要这样做。

请记住,我的解决方案是一个黑客,真的不是很漂亮。也许别人可以更好地思考一些事情。

相关问题