2011-01-05 164 views
3

我只是想禁用用戶點擊某個條件的元素的能力,然後爲其他條件重新綁定它。以下是我正在使用的一些代碼:jquery解除綁定和綁定

$('#navigation a').bind('click',function(e){ 

    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; 

    if (current == 1){ 
     $("#navigation a:eq(1)").unbind("click"); // remove the click for element 
    } 
    if (current >= 2){ 
     $("#navigation a:eq(1)").bind("click"); // this doesn't work, but i want re-bind the click here. 
    } } 

我需要做些什麼來完成這項工作?

+0

什麼錯誤你得到了嗎? – 2011-01-05 04:56:43

+0

如何在函數中返回false而不是綁定/解除綁定?另外,一個命名函數會使事情變得更容易。 – 2011-01-05 05:00:30

+0

查看http://api.jquery.com/live/,我想你可以做preventDefault()而不是解除綁定 – 2011-01-05 05:01:00

回答

4

這聽起來像你實際上只想禁用工作的第一個導航鏈接。如果是這樣的話,你只是想:

$("#navigation a:first").click(function() { return false; }); 

從事件處理程序返回false阻止瀏覽器的默認行爲從發生的歷史(下面的鏈接)。

雖然,如果鏈接並不意味着可以點擊,不要讓一個鏈接,把它變成一個<span>

var link = $("#navigation a:first"); 
$("<span>").text(link.text()).attr("class", link.attr("class")) 
    .insertBefore(link); 
link.remove(); 

(假設該鏈接的類屬性是唯一值得屬性複製)。


如果你真的不希望拆散你寫的自定義處理程序,然後你想給處理函數的因此它可以被再次重新綁定引用:

$('#navigation a').bind('click', onClick); 

function onClick(e) { 
    var $this = $(this); 
    var prev = current; 

    current = $this.parent().index() + 1; 

    if (current == 1){ 
     $("#navigation a:eq(1)").unbind("click"); // remove the click for element 
    } else { 
     $("#navigation a:eq(1)").bind("click", onClick); // use the function again 
    } 
} 
+0

完美!謝謝。 – scifirocket 2011-01-05 05:39:13