Как выбрать элемент привязки внутри div, созданного во время выполнения с помощью jquery? - PullRequest
0 голосов
/ 11 сентября 2010

У меня есть эта разметка:

<body>
    ...
    ...
    <div class="helper">
        <div class="menu-container">
            <ul class="menu">
                <li><a href="#" class="theLink">Link 1</a></li>
                <li><a href="#" class="theLink">Link 2</a></li>
                <li><a href="#" class="theLink">Link 3</a></li>
            </ul>
        </div>
    </div>
</body>

Я хотел бы выбрать все элементы "a" с классом "theLink".

Обратите внимание, что div "helper" и div "menu-container" создаются во время выполнения , после нажатия на привязку, другим плагином jQuery, так что я думаю, что мне нужноиспользовать «живую» особенность jquery.

Спасибо за помощь

РЕДАКТИРОВАТЬ : @everybody ответил Пожалуйста, посмотрите этот пост .

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

Обратите внимание, что я упростил разметку здесь: что такое class = "theLink", то здесь class = "contactRole" во вчерасообщение.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 11 сентября 2010

Не нужно использовать .live(), то есть для автоматического присоединения событий к вновь создаваемым элементам.

$(a.theLink);

Получит вам все элементы типа a, с классом theLink.

1 голос
/ 11 сентября 2010

Если вы хотите только выбрать их, все опубликованные решения будут работать отлично, но если вы действительно хотите делать что-то, когда на них нажимают, попробуйте это:

$("a.theLink").live("click", function(event){
    //do stuff
    event.preventDefault(); // Prevent default link behaviour
});

UPDATE

Я быстро прочитал исходный код плагина и увидел, что группа обработчиков .click() выполняет return false (строки 28, 211, 304 и т. Д.). Я довольно новичок в использовании функции .live(), но из того, что я понимаю, и, как кто-то фактически указал уже в комментарии к вашему другому вопросу, .live() НЕ будет работать с элементом, который уже имеет .click() обработчик, который возвращает false. В случае с этим конкретным плагином, Я ДУМАЮ , что return false; используется для предотвращения повторяющихся действий, таких как повторное открытие меню, если оно уже открыто, но я могу быть далеко.

Трудно дать вам окончательный ответ на вашу проблему, в основном потому, что мне потребуется знать, что плагин действительно хорош, чего я, очевидно, нет. Однако для начала я бы изменил этот плагин, закомментировав / удалив все строки return false; из обработчиков .click() и посмотрев, что исправлено, а что - сломано.

Пожалуйста, дайте мне знать, если / как это работает.

0 голосов
/ 11 сентября 2010

jQuery будет выбирать из того, что находится на странице во время его запуска.Так что это зависит от того, как / где будет вызываться функция jQuery.

Например, если вы хотите ссылаться на эти ссылки после того, как они были созданы, вы просто используете $('a.theLink') или $('ul.menu a.theLink') или т. Д.

Если вы хотите установить события для этих элементов еще до того, как они будут созданы, вы бы использовали live.Может быть что-то вроде ниже, которое будет связывать с текущими a.theLink и любыми a.theLink, которые будут созданы в будущем.

$('a.theLink').live('click', function() {
  // Live handler called.
});

http://api.jquery.com/live/

0 голосов
/ 11 сентября 2010

Неважно, когда они созданы, и "live" - ​​это нечто совершенно другое - это инструмент для обработки событий / делегирования событий, а не селекторы.

$('a.theLink') или $('ul.menu a.theLink') или что-то еще (в зависимости от того, хотите ли вы выглядеть глобально) будет работать просто отлично.

0 голосов
/ 11 сентября 2010

Вы можете использовать

$("a.theLink");

И если вы привязываете событие к этим ссылкам, да, вы должны использовать live, если страница получает новый контент после начальной перезагрузки.

Итак, вы можетеиспользование:

$("a.theLink").live("click", function(){
    alert("clicked!");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...