Отвязка определенных элементов jquery - PullRequest
1 голос
/ 07 августа 2009

Допустим, я хочу обработать все ссылки на странице с помощью специальной функции, поэтому я делаю:

$('a').bind("click", handleLinks);

Но у меня есть навигационная панель со ссылками, которые я хочу обрабатывать по-разному. Поэтому я хочу сделать это, которое не работает:

$('#navbar a').unbind("click", handleLinks);

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

Есть предложения?

:: ОБНОВЛЕНИЕ ::

Мои искренние извинения, вы все правы - было что-то странное с порядком вызова команд. Извините!

Ответы [ 3 ]

2 голосов
/ 08 августа 2009

Я согласен с apocalypse9, что похоже, что у вас должно работать. Возможно, другой подход даст лучшие результаты ... Как насчет использования: not селектора с live (). Live обеспечит работу селектора с динамически добавленными элементами.

$('a:not(#navbar a)').live("click", handleLinks);

http://docs.jquery.com/Selectors/not#selector

http://docs.jquery.com/Events/live

0 голосов
/ 09 августа 2009
$('a').not('#navbar a').bind('click', handleLinks);
0 голосов
/ 07 августа 2009

Странно - это выглядит правильно. Проверяли ли вы, что ваше первоначальное утверждение выбирает то, что, по вашему мнению, оно делает?

http://docs.jquery.com/Events/unbind

Edit- Хорошо, я сделал тестовую страницу

<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>

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

Вы не против опубликовать немного больше кода> похоже, что может быть что-то еще не так.

...