2010-08-10 43 views
1

我在某些鏈接上使用facebox插件。如何禁用facebox(jquery)

我想動態地禁用一些鏈接。所以點擊它們將不會打開facebox。

我嘗試了幾種方法來做到這一點,但他們都沒有效果。點擊鏈接時,Facebox仍然有效。

我甚至試過(防止點擊和鼠標停止事件),但它仍然不會禁用彈出的facebox。

$('#who_button').click(function(event) { event.preventDefault();}); 
$('#who_button').mousedown(function(event) { event.preventDefault();}); 

我該怎麼辦?

編輯:

繼布拉德和PetersenDidIt建議我嘗試這樣做:

$('#who_button').click(function(event) { alert ('here');event.stopPropagation(); event.stopImmediatePropagation();}); 
    $('#who_button').mousedown(function(event) { event.stopPropagation(); event.stopImmediatePropagation();}); 

,仍然沒有運氣。此外,我發現面部框框出現在警報對話框下。這意味着facebox在我的click/mousedown事件甚至被調用之前就開始了。

是否可以附加在所有其他事件之前發生的事件?

也許facebox使用另一個事件(不是點擊或mousedown)。它會是什麼?

回答

1

的preventDefault只是防止任何該點擊的正常行爲是(即重定向中的鏈接)。

我從來沒有用過facebox,所以我不知道它是如何結合的活動,但你可能想要一些東西更像:

event.stopImmediatePropagation() 

編輯

貌似facebox用途這是自己的自定義事件。你可以在源代碼中看到這個(下面)。所以,最好的辦法是從該事件解除綁定你的元素:

$("ele").unbind("click.facebox"); 

Facebox公共職能

$.fn.facebox = function(settings) { 
    if ($(this).length == 0) return 

    init(settings) 

    function clickHandler() { 
     $.facebox.loading(true) 

     // support for rel="facebox.inline_popup" syntax, to add a class 
     // also supports deprecated "facebox[.inline_popup]" syntax 
     var klass = this.rel.match(/facebox\[?\.(\w+)\]?/) 
     if (klass) klass = klass[1] 

     fillFaceboxFromHref(this.href, klass) 
     return false 
    } 

    return this.bind('click.facebox', clickHandler) 
    } 
+0

謝謝!請參閱上面編輯 – Nir 2010-08-10 15:58:37

+0

見上面編輯... – brad 2010-08-10 16:23:17

+0

謝謝布拉德! $(「ele」)。unbind(「click.facebox」);不起作用,因爲此語法需要指定綁定的函數名稱。但是: $(「#who_button」)。unbind();似乎運作良好。 – Nir 2010-08-10 16:57:46

0
+0

這隻會防止任何父元素冒泡。如果點擊直接綁定到上面引用的元素,它仍然會觸發。取決於Facebox如何綁定其事件。 – brad 2010-08-10 15:47:27

+0

謝謝!請參閱上面的編輯 – Nir 2010-08-10 15:57:59