Отвязка определенных элементов jquery
Вопрос
Допустим, я хочу обрабатывать все ссылки на странице с помощью специальной функции, поэтому я делаю:
$('a').bind("click", handleLinks);
Но у меня есть панель навигации со ссылками, которые я хочу обработать по-другому.Поэтому я хочу сделать это, но это не работает:
$('#navbar a').unbind("click", handleLinks);
Я не хочу специально исключать панель навигации в первом операторе, потому что содержимое загружается динамически, поэтому элементы, которые мне нужно отслеживать на предмет кликов, будут меняться в зависимости от содержимого.По сути, я хочу иметь возможность динамически отсоединять определенные подмножества элементов от большего начального подмножества элементов, которое было привязано изначально.
Есть какие-нибудь предложения?
::Обновить ::
Мои искренние извинения, вы все правы - было что-то странное в порядке вызова команд.Извините!
Решение
Странно - это выглядит правильно.Проверяли ли вы, что ваше первоначальное утверждение выбирает то, что, по вашему мнению, оно делает?
http://docs.jquery.com/Events/unbind
Редактировать- Хорошо, я сделал тестовую страницу
<body>
<a href="#" class="a">Test A</a>
<a href="#" class="a">Test A</a>
<a href="#" class="a">Test A</a>
<a href="#" class="b">Test B</a>
<a href="#" class="a">Test A</a>
<a href="#" class="b">Test B</a>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$('a').bind("click", testClick);
$('a.b').unbind("click", testClick);
});
function testClick(){
alert("Link Clicked");
};
</script>
</body>
Это работает нормально, однако, если я построил свою встроенную функцию, мне нужно было отвязать все события от выбранных элементов, чтобы удалить ее.Не уверен, применимо это или нет, но стоит упомянуть.
Не могли бы вы опубликовать немного больше кода> похоже, что может быть что-то еще не так.
Другие советы
Я согласен с apocalypse9 в том, что, похоже, то, что у вас есть, должно сработать.Возможно, другой подход дал бы лучшие результаты...Как насчет использования селектора :not с live().Live гарантирует, что селектор работает с динамически добавляемыми элементами.
$('a:not(#navbar a)').live("click", handleLinks);
$('a').not('#navbar a').bind('click', handleLinks);