jquery unbinding и переплет - PullRequest
       4

jquery unbinding и переплет

3 голосов
/ 05 января 2011

Я просто хочу отключить возможность для пользователя щелкнуть элемент для какого-либо условия, а затем повторно связать его позже для другого условия.Вот код, с которым я работаю:

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

Что мне нужно сделать, чтобы эта работа работала?

1 Ответ

4 голосов
/ 05 января 2011

Похоже, вы действительно хотите просто отключить первую навигационную ссылку от работы. Если это так, вы просто хотите:

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