2009-11-25 4 views
11

Таким образом, есть два ограничения на мой вопрос:JQuery: Переплет и Освобождение Текущих Нажмите События

  1. Я должен использовать вызов внешней функции в моем случае щелчка, и
  2. я должен использовать живое событие щелчка, скорее связывая типичное событие click.

Таким образом, моя проблема заключается в том, что я пытаюсь отменить событие клика после его возникновения, а затем восстановить его после завершения кода события клика. Я делаю это, чтобы предотвратить дублирование кликов во время работы кода (у меня есть анимация fadeIn/Out, которая позволит щелкнуть кнопкой дважды или три раза быстрее, тем самым выполняя мой код 2 или 3 раза, что не требуется) , Код, я использую ниже:

$item.live("click", handleClick); 

и

function handleClick(ev) { 

    $(this).die("click"); 

    // perform code here, including things with 'ev' 

    $(this).live("click", handleClick); 
} 

ли я с ума, или это должно работать без проблем? Прямо сейчас, я могу щелкнуть один раз, но не позже. Настолько ясно, что die() работает, но по какой-то причине эта функция не переопределяется. Я проверил, что он достигает кода в handleClick(), чтобы повторно привязать живой клик.

Любые идеи? Любая помощь будет принята с благодарностью. Благодарю.

ответ

8

Согласно documentation:

Текущие события в настоящее время работают только при использовании против селектора.

$(this) не является селектором.

+0

@Greg, интересно. Возможно, если бы я назначил событие live click в функции как таковое: 'var $ tempVar = $ ('#' + $ (this) .attr ('id'))', а затем сказал '$ tempVar.live (" click ", handleClick)' Как вы думаете, это сработает? –

+0

I * думаю * так ... – Greg

+2

Да что будет работать – PetersenDidIt

6

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

$(".clickme").die("click"); 
0

Вы можете использовать этот шаблон, чтобы отвязать Clicked элемента, и пусть все остальные живут :

$('a.myselector').live('click', function() { 

    // do things 

    $(this).unbind('click').live('click', function() {return false;}); 

    return false; // block the link 
}); 

работы с Jquery 1.8.2