2013-05-10 2 views
1

Может что-то важно, что я пропускаю, но если я использую это, когда документ готовыйJquery .off все обработчики

$('a.edit').on("click", displayEditForm); 

И тогда это после вызова Ajax

$('a.edit').off(); 
$('a.edit').on('click', displayEditForm); 

Он работает, мне нужно чтобы отключиться, потому что некоторые из a.click динамически загружены, а некоторые из них не так, я хочу приложить только один раз ко всем из них. Проблема в том, что это работает пока, но я хотел бы использовать

$('a.edit').off('click', displayEditForm); 
$('a.edit').on('click', displayEditForm); 

и это не работает. Это не сработает, но некоторые из них дважды вызывают функцию при нажатии. Не работает ни при использовании

$('a.edit').off('click', '**'); 

Любая идея, почему?

Благодаря

+2

делегацию Использование событий и забыть о постоянном вызове 'off', а затем' on' снова. Посмотрите раздел делегирования событий в документации 'on'. http://api.jquery.com/on/ –

+0

Почему вы хотите использовать второй блок, если первый блок работает? –

+1

Собираюсь попробовать, я бы хотел использовать второй, потому что первый из них удаляет все обработчики, на данный момент у меня есть только этот, но, возможно, в будущем будет больше необходимо – mitomed

ответ

7

Если вы создаете их динамически можно привязать click() как эти:

$(document).on('click' , 'a.edit', function(){}) 

или использовать $(document).delegate('a.edit', 'click', function(){})

Лично я использую первое решение

+3

Также нет причин упоминать использование '.delegate()' вообще, если они используют версию, содержащую '.on()' (1.7+). –

+1

Если они не писали плагин, который хотел бы быть обратно совместимым, но в любом случае это не нормально использовать делегирование событий в плагине. –

+0

@ AnthonyGrist Да, я знаю, на самом деле я написал первое решение как хорошее. Второй как другое решение – steo

Смежные вопросы