JQuery каждый возвращает только первое значение

0

я хотел бы пройти через каждого человека и получить размер изображения. С высотой и шириной я могу установить высоту и ширину для div ".text-person-show".

$(window).load(function () {
    $(".person").each(function () {
        var h = $(this).find(".person-image").height();
        var w = $(this).find(".person-image").width();

        $(this).hover(function () {
            alert(w);
            $(this).find(".person-image").toggle();
            $(this).find(".text-person").toggle();
            $(this).find(".text-person").toggleClass("text-person-show", 'add');
            $(".text-person-show").width(w).height(h);
        });
    });
});

HTML:

<div class="person">
<div class="person-post">
    <div class="person-image">  <img src="<?php the_field('image'); ?>"></div>
        <div class="text-person">
            <div class="text-inner">
                 <div class="name-person-text-inner"><?php the_title(); ?>
                 </div>     
            </div>
        </div>
</div>

Вопрос: почему я получаю только предупреждение (w) для первого ".person"? Я не понимаю сейчас! переменная область?

Много спасибо !!!

  • 1
    Потому что это предполагаемое поведение геттера, запускаемого в коллекции; что вы ожидали / хотели получить?
  • 1
    Всякий раз, когда я вижу ручное связывание событий внутри цикла, я чувствую себя плохо.
Показать ещё 5 комментариев
Теги:

1 ответ

2
Лучший ответ

попробуйте под кодом и используйте событие.on для будущих событий, а также удалите каждый цикл.

$(window).load(function () {                    
        $('.person').on('hover', function () {
        var h = $(this).find(".person-image").height();
        var w = $(this).find(".person-image").width();

            alert(w);
            $(this).find(".person-image").toggle();
            $(this).find(".text-person").toggle();
            $(this).find(".text-person").toggleClass("text-person-show", 'add');
            $(".text-person-show").width(w).height(h);
        });
       });

Боковое примечание Как было предложено Дэвидом Томасом:

on() был доступен в jQuery версии 1.7 (в этот момент live() устарел). В jQuery до 1.7 команда jQuery рекомендовала в документации API для самого метода использовать делегат(). Функция live() имеет ряд проблем (цепочка, разбухание событий и производительность) и не должна использоваться даже там, где она доступна (если не подтверждены компромиссы в documentaiton для метода).

  • 2
    on() был доступен в jQuery с версии 1.7 (в этот момент live() устарела). В jQuery до 1.7 команда jQuery рекомендовала в документации API для самого метода использовать delegate() . live() есть ряд проблем (цепочка, всплывающее событие и производительность), и ее не следует использовать даже там, где она доступна (если не подтверждены компромиссы в документе для метода).
  • 0
    Спасибо за информацию @DavidThomas Я обновил ответ соответственно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню