2011-01-05 131 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