3

我只是想禁用用户在某些条件下单击元素的功能,然后稍后再将其重新绑定以用于另一个条件。这是我正在使用的一些代码:

 $('#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.
    } }

我需要做什么才能完成这项工作?

4

1 回答 1

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
    }
}
于 2011-01-05T05:02:08.593 回答