xoma2
@xoma2
Программист

Как отписать от события кнопку?

Ничего не получается

$('a.select-city').unbind('click');

        $('body').on('click', 'a[href]', function (e) {
                e.preventDefault();
                var link = $(this).attr('href');
                updatePrice(link);
        }).unbind($('a.select-city'));

        $('a.select-city').unbind('click');


Не работает ни один из этих методов

Дело в том, что на эту ссылку, которую мне нужно анбиндить, нужно на нее персонально вызвать .click
  • Вопрос задан
  • 696 просмотров
Решения вопроса 4
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Не будем вдаваться в реализацию обработки событий jQuery, но основное для вас:

1. Для установки/снятия обработчика (он же слушатель) есть пары on()off(), bind()unbind(), delegate()undelegate().

2. Устанавливаем и снимаем обработчик в одном объекте jQuery. Если вы слушаете в каком-то элементе (коллекции элементов), то в в другом элементе уже не снимете. Не имеет значения, как вы получили объект, с помощью селектора атрибута, класса, имени тэга, или прямой ссылки, — это должен быть либо тот же объект, либо элемент той же коллекции.

$('a[href]').on('click', function (e) {
	e.preventDefault();
	// Дальше мутим
});
$('.select-city').off('click');


3. Используйте селектор отрицания :not().

$(document).on('click', 'a[href]:not(.select-city)', function (e) {
	e.preventDefault();
	// Дальше мутим
});
Ответ написан
@durf
Вы вешаете клик на body, а отписываетесь на ссылке.
если нужен клик на всем body кроме ссылки то можно так

$('body').on('click', 'a[href]', function (e) {
 if($(e.target).is("a.select-city")){
  return true;
 }
 e.preventDefault();
 var link = $(this).attr('href');
 updatePrice(link);
});


тоесть в обработчике клика проверить - не кликнули ли это по нашей ссылке. И если кликнули то сразу выходим с положительным результатом, чтобы браузер обработал клик.
Ответ написан
@GreatRash
У вас тут реализовано делегирование события. Просто напишите проверку если у кнопки есть определённый класс, то ничего не делать.

$('body').on('click', 'a[href]', function (e) {
  if ($(this).hasClass('select-city')) {
    return;
  }

  // бла-бла-бла
});
Ответ написан
Комментировать
xoma2
@xoma2 Автор вопроса
Программист
$(document).on('click', 'a[href]:not(a.select-city)', function (e) {
                e.preventDefault();
                var link = $(this).attr('href');
                updatePrice(link);
        })


Заработало только вот так вообще
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
zolt85
@zolt85
Программист
Комментировать
keslo
@keslo
Если используется для установки события on(), то логично, что для снятия события использовать off() для начала. Или я не прав?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы