2011-10-18 87 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,所以這個「應該」不是問題。但我明白爲什麼有人可能想要這樣做。

請記住,我的解決方案是一個黑客,真的不是很漂亮。也許別人可以更好地思考一些事情。

相關問題