Отключение привязки с помощью protectDefault () и упорядочением событий - PullRequest
0 голосов
/ 27 мая 2011

В моем приложении я использую стили привязки тегов так же, как кнопки. Мне нужно иметь возможность отключить кнопки, но у тега привязки нет атрибута отключен. Путь, который я пытался обойти, - это использовать protectDefault () в событии щелчка якоря, например:

$('a.disabled').click(function (e) {
    e.preventDefault();
});

Это не отключение ссылки. Однако, если я просто использую селектор 'a' $('a').click(function()..., он отключит ссылку. Я предполагаю, что это связано с приоритетом событий или упорядочением событий на основе селекторов.

Кто-нибудь знает способ обойти это ??

UPDATE

Я только что понял, что приведенный выше код работает, если ссылка на идентификатор привязки в селекторе, опять же, это заставляет меня поверить, что это как-то связано с приоритетом селектора CSS, т.е. стили, на которые ссылаются id, переопределяют стили класса и т. Д.

Ответы [ 3 ]

4 голосов
/ 27 мая 2011

Я предполагаю, что вы устанавливаете класс disabled ПОСЛЕ того, как вы связали обработчик события click.Если ваш элемент не соответствует селектору во время привязки , он не будет работать.Если вы хотите запустить ваш обработчик, если ваш элемент будет соответствовать вашему селектору в будущем , вам нужно использовать live () .

$('a.disabled').live("click", function(e){
    e.preventDefault();
});
1 голос
/ 27 мая 2011

Кажется, вы не установили класс disabled для якорей.Вы уверены, что они выглядят как

<a href="" class="disabled"></a>

?

0 голосов
/ 27 мая 2011

Даже если у вас было несколько событий в одной и той же ссылке, и это было не первое выполненное предупреждение, то в любом случае должна работать функция protectDefault ();поскольку действие по умолчанию выполняется после запуска всей очереди событий.

Вместо этого я думаю, что ваше событие никогда не запускается;убедитесь, что вы указали отключенный класс на своей ссылке

<a href="..." class="disabled"></a>

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

event.stopPropagation() // stop event bubbling, prevent the event to apply on his parent eg if your <a> is in a div, prevent the div click event queue to run -- SHOULDN'T BE YOUR PROBLEM
event.stopImmediatePropagation() // same as stopPropagation() and in addition stop the event queue on this element (so if you have 3 clicks event on your link and the first calls this, the other two won't run)
return false; // fully cancel the event, has the effect to also stop the event queue, similar to calling preventDefault() AND stopImmediatePropagation() -- SHOULDN'T BE YOUR PROBLEM

Чтобы быть на 100% уверенным, вы можете проверить, что ваше событие работает, изменив ссылку на <a href="#" class="disabled> (чтобы страница не перезагружалась)делать console.log('test') во время мероприятия.Если он не вызывается, он либо не затрагивается, либо отменен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...