【问题标题】:Hovering one element changes another in the loop JS/jquery悬停在循环 JS/jquery 中的一个元素会改变另一个元素
【发布时间】:2021-01-05 04:01:56
【问题描述】:

我正在制作一个返回多个项目的循环,我有一个收藏按钮,当悬停时它会运行一个 toggleClass 来更改图标,但它只在循环的第一项中这样做,有人可以帮助我吗?

<div class="favoriteButton" id="favoriteButton"> 
<i id="favoriteIcon" class="far fa-2x fa-heart"></i>
</div>

jQuery 代码:

// Favorite Icon
$("#favoriteIcon").hover(() => {
    $("#favoriteIcon").toggleClass("far fas"); 
});

循环:

for ($i = 0; $i < count($vehicles); $i++) { 
  echo '<div class="favoriteButton" id="favoriteButton"> 
        <i id="favoriteIcon" class="far fa-2x fa-heart"></i>
        </div>';
}

【问题讨论】:

  • id 必须是唯一的。不要在创建 DOM 元素的循环中使用 id。改用类。
  • @LouysPatriceBessette 当我通过课程时,它会更改循环生成的页面上的所有图标

标签: javascript jquery loops for-loop


【解决方案1】:

您的 for 循环生成 i 元素,它们都具有相同的 id favoriteIcon ,在 html 页面中,不同元素具有相同的 id 是不正确的;

将代码更改为使用类是正确的

for ($i = 0; $i < count($vehicles); $i++) { 
  echo '<div class="favoriteButton" > 
        <i class="far fa-2x fa-heart fav-icon-class"></i>
        </div>';
}

你用javascript来:

// Favorite Icon
$(".fav-icon-class").hover(function() {
    $(this).toggleClass("far fas"); 
});

【讨论】:

  • $ (This) ... 将此返回给我:Window {window: Window, self: Window, document: document, name: "", location: Location,…} 如果我不通过 $(this) 但类名为 $(".fav-icon-class") ...它改变了循环中的所有图标@bassxzero
  • () =&gt; 更改为function()arrow Fuction Expression 有一些限制......就像它对 this 没有绑定一样。
猜你喜欢
  • 2015-08-01
  • 2013-06-30
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多