jQuery: имеет ли `.off()` те же ограничения, что и `.die()`

#jquery #jquery-1.7

#jquery #jquery-1.7

Вопрос:

Я вижу в документации для .die() , что это говорит:

Для корректной работы .die() используемый с ним селектор должен точно соответствовать селектору, первоначально использованному с .live().

Имеет ли новый метод в jQuery 1.7 такое же ограничение *?

*на самом деле не уверен, считается ли это ограничением или функцией

Ответ №1:

Ограничение фактически все еще существует.

Ограничение с живой демонстрацией

 $(".bind").click(function(){
    $(".clone").live("click",function(){
        $(this).clone().insertAfter(this);
    });
});

$(".unbind").click(function(){
    $(".clone,.somethingelse").die("click");
});
  

работаем над демонстрацией

 $(".bind").click(function(){
    $("body").on("click",".clone",function(){
        $(this).clone().insertAfter(this);
    });
});

$(".unbind").click(function(){
    $("body").off("click",".clone");
});
  

Ограничение с демонстрацией

 $(".bind").click(function(){
    $("body").on("click",".clone",function(){
        $(this).clone().insertAfter(this);
    });
});

$(".unbind").click(function(){
    $("body").off("click",".clone,.somethingelse");
});
  

Как вы можете видеть, вам нужно будет указать тот же селектор, что и в live.

Ответ №2:

Да и нет. Вызов .off должен будет имитировать синтаксис .live, однако аргумент селектора не требуется. Вызов .off() для всех событий щелчка по определенному элементу отменит все события щелчка, включая делегированные. Если вы хотели удалить только определенное делегированное событие или только делегированные события, вам все равно нужно будет указать селектор для этого делегированного события, иначе все остальные события тоже будут удалены.