Jquery each (), похоже, не работает в моем случае

#jquery #each

#jquery #каждый

Вопрос:

У меня есть список пользователей / веб-сайтов, и у каждого из них есть баннер. Я хочу показать этот баннер с помощью всплывающей подсказки.

 $(document).ready(function() {

     $(".test").each(function(i) {  

          var banner_url = $("input[name='banner_url']").val();

          var index = i   1;
          $(this).tipTip({maxWidth: "auto", edgeOffset: 10, content: banner_url   index});
     });
});
  

Но он всегда показывает один и тот же баннер в каждой всплывающей подсказке

( index var существует только для тестирования each , и это работает, но banner_url нет)

Я также пытался поместить URL-адрес баннера var раньше .test each() , но с теми же результатами. Кто-нибудь знает, в чем дело? Я уверен, что что-то пропустил.

 <div class="banner">
<input type="hidden" name="banner_url" value="{$banner_url}" />
<a href="{$url}" onclick="out('{$username}');" id="{$username}" class="test" title="">{$title}</a>
</div>
  

Пытался также поместить эти 2 в контейнер div, но, похоже, это ничего не меняет

Я могу поместить код баннера в атрибут title, но я хочу избежать необходимости жестко кодировать img в теге title.

Спасибо за любые советы, помогите. Seb

Комментарии:

1. Не могли бы вы также показать структуру HTML? Я предполагаю, что контейнер имеет класс «test», а внутри находится один вход с именем «banner_url»?

2. Теперь это там. возникли проблемы с dome.

3. Я уже исправил это, чтобы удалить теги кода — вы должны сделать отступ в своем коде на 4 пробела вместо использования тегов кода.

Ответ №1:

Не видя всего HTML, я предполагаю, что вы хотите, чтобы banner_url находился внутри каждого контейнера .test, поэтому:

 $(".test").each(function(i, element_with_class_test) {  
      var banner_url = $(element_with_class_test).find("input[name='banner_url']").val();
 ...
});
  

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

Комментарии:

1. Я бы даже рекомендовал использовать $(.test).each(function(i,e){ var url = $(e).prev('input[name="banner_url"]') ... }); , поскольку привязка не является контейнером, а является корнем поиска.

2. Брэд в вашем примере $ (.test).each(функция (i,e){ var url = $ (e).prev(‘ввод [name=»banner_url»]’) … }); что такое i и e

Ответ №2:

Я подозреваю, что проблема связана с вашим использованием:

 $("input[name='banner_url']")
  

Вызов jQuery с этим селектором ограничен документом, а не элементом, который вы получаете с помощью each().

В вашем html тег с URL-адресом находится на том же уровне в DOM, что и ваш элемент, поэтому вам нужно использовать соответствующую функцию поиска jQuery, чтобы найти его. Это должно сработать:

 var banner_url = $(this).prevUntil("input[name='banner_url']").last().val();
  

Комментарии:

1. При этом, похоже, отображается только баннер второго .banner div. ( см. Обновленный html)