idclev31
@idclev31
Местный дурачек

Почему не работает массив ссылок jquery?

На странице есть определенное количество элементов-ссылок внутри<div class='roomsList'> ,структура у них такая <a href=""><span></span></a>
Так же имеется javascript код,который в идеале должен при нажатии на ссылку,выводить сообщение в консоль
$('.roomsList a span').toArray().forEach(function(element){
    $(element).on('click',function(){
      console.log('lalala');
      return false;
    });
  });
По идее return false должен предотвращать перезагрузку страницы,но она все равно происходит.Что здесь я делаю не так?
Я совсем забыл,что для динамически создаваемых обьектов не вешается слушатель,поэтому-то ничего и не работает.
Проблема решается делегированием,и вешанием слушателя на div
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
SowingSadness
@SowingSadness
web-разработчик
Зачем тут toArray?
$('.roomsList a').each(function(element){
   //...
});


А вообще вам нужно при клике делать preventDefault

$(this).on('click',function(event){
    event.preventDefault();
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ronnie_Gardocki
@Ronnie_Gardocki
Я у мамы фронтендщик.
Вы отменяете стандартное действие по клику на span (которого в общем то и нет), и затем идет всплытие ивента, которое триггерит стандартный ивент при клике на анкор. Вам либо надо предотвращать всплытие, с помощью e.stopPropagation(), либо биндить перехват ивента конкретно на a, а не на спан внутри a.
Ну и к тому же конструкция с toArray.forEach кривая, вам надо делать как написано в ответе Kir ---
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы