我正在尝试运行一个简单的like和addtocart功能,当用户点击图标时,它会立即切换到填充或不同的颜色图标。但是,父div的链接也是继承的,所以我在脚本中添加了stopPropagation。我没有添加html& #addtocart的脚本代码,因为该函数将类似于#heart like icon。
问题是,切换不起作用+我的编辑器给我一个“错误:$ undefined”msg,即使我正确地链接我的javascript。如果有人可以帮我指出我哪里出错了,我将不胜感激。我最终想添加一些功能,点击图标会将产品添加到用户的愿望清单或购物车页面,但我还没有学习如何编写后端代码,所以我现在只渲染用户界面。但是,如果您可以告诉我如何将图标链接到用户的心愿单或购物车页面而不继承父母的链接,那就太棒了。
$(document).ready(function() {
$('#heart').click(function() {
$('#heart--liked').toggle('1000');
});
$("#heart a").click(function(e) {
//do something to stop link # from loading
e.stopPropagation();
});
});
.product__list__item {
border-radius: 2px;
background-color: var(--pure-white);
border: solid 1px var(--dark-grey);
}
.product__list__item--description {
padding: 1.5rem;
text-align: left;
}
.product__list__item h3 {
margin-bottom: .75rem;
position: relative;
display: block;
}
.product__list__item--icons {
display: inline-block;
float: left;
padding-top: 5px;
}
.product__list__item--icons a {
color: var(--middle-grey);
}
.product__list__item--icons a:hover {
color: var(--dark-grey);
}
#heart--liked {
display: none;
transition: .2s;
}
#addtocart {
margin-left: 10px;
}
.product__list__item--price {
display: inline-block;
float: right;
color: var(--dark-gray);
font-size: 1.5rem;
text-align: right;
margin-top: 50px;
}
.price--hot {
color: var(--crimson-red);
}
.price--display {
color: var(--pompeian-pink);
}
.product__list__item--description h3 sup {
font-size: .875rem;
padding: 5px;
text-transform: uppercase;
vertical-align: super;
}
.price__sale {
text-decoration: line-through;
font-size: 1.25rem;
color: var(--highlight-gray);
margin-left: 5px;
vertical-align: sub;
}
.product__list__item--description:after {
content: "";
display: table;
clear: both;
}
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.11/css/all.css" integrity="sha384-p2jx59pefphTFIpeqCcISO9MdVfIm4pNnsL08A6v5vaQc4owkQqxMV8kg4Yvhaw/" crossorigin="anonymous">
</head>
<body>
<div class="product__list__item">
<a href="#" class="image-container">
<div class="image-container__wrapper">
<div class="image-container--mask">
<h4>View details</h4>
</div>
<img src="https://foter.com/photos/235/design-tree-home-acapulco-lounge-chair-yellow-1.jpg?s=pi" alt="yellow chair">
</div>
<div class="product__list__item--description">
<h3>Yellow Chair<sup class="price--hot">Clearance!</sup></h3>
<div class="product__list__item--icons">
<span id="heart"><a href=" "><i class="far fa-heart fa-2x"></i><i id="heart--liked" class="fas fa-heart fa-2x"></i></a></span>
<span id="addtocart"><a href=" "><i class="fas fa-cart-plus fa-2x"></i></a></span>
</div>
<div class="product__list__item--price price--hot">$189
<sub class="price__sale">$109</sub>
</div>
</div>
</a>
</div>
</body>
</html>
答案 0 :(得分:1)
我建议您在单击时使用类来更改颜色。
请参阅下面的工作片段,我尝试尊重您的行事方式:
我在主体中添加了CSS变量以使其工作,并添加/修改了一些注释。
$(document).ready(function() {
// Specific code for the heart fill toggle
$("#heart--liked").click(function(e) {
$(this).toggleClass("far").toggleClass("fas"); // Toggle the filling !
});
// Action when click on a link (color)
$(".product__list__item--icons a").click(function(e) {
e.preventDefault(); // Modified: stop link # from loading (Why using link then?)
$(this).toggleClass("selected"); // Toggle the colored class !
});
});
&#13;
.product__list__item {
border-radius: 2px;
background-color: var(--pure-white);
border: solid 1px var(--dark-grey);
}
.product__list__item--description {
padding: 1.5rem;
text-align: left;
}
.product__list__item h3 {
margin-bottom: .75rem;
position: relative;
display: block;
}
.product__list__item--icons {
display: inline-block;
float: left;
padding-top: 5px;
}
.product__list__item--icons a {
color: var(--middle-grey);
}
.product__list__item--icons a:hover {
color: var(--dark-grey);
}
/* Added the two below */
.product__list__item--icons .selected {
color: var(--light-pink);
}
.product__list__item--icons .selected:hover {
color: var(--pink);
}
#heart--liked {
/*display: none; REMOVED */
transition: .2s;
}
#addtocart {
margin-left: 10px;
}
.product__list__item--price {
display: inline-block;
float: right;
color: var(--dark-gray);
font-size: 1.5rem;
text-align: right;
margin-top: 50px;
}
.price--hot {
color: var(--crimson-red);
}
.price--display {
color: var(--pompeian-pink);
}
.product__list__item--description h3 sup {
font-size: .875rem;
padding: 5px;
text-transform: uppercase;
vertical-align: super;
}
.price__sale {
text-decoration: line-through;
font-size: 1.25rem;
color: var(--highlight-gray);
margin-left: 5px;
vertical-align: sub;
}
.product__list__item--description:after {
content: "";
display: table;
clear: both;
}
&#13;
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.11/css/all.css" integrity="sha384-p2jx59pefphTFIpeqCcISO9MdVfIm4pNnsL08A6v5vaQc4owkQqxMV8kg4Yvhaw/" crossorigin="anonymous">
</head>
<body style="--middle-grey: #888; --dark-grey: #444; --light-pink: #ffb6c1; --pink: #dd888b;">
<div class="product__list__item">
<a href="#" class="image-container">
<div class="image-container__wrapper">
<div class="image-container--mask">
<h4>View details</h4>
</div>
<img src="https://foter.com/photos/235/design-tree-home-acapulco-lounge-chair-yellow-1.jpg?s=pi" alt="yellow chair">
</div>
<div class="product__list__item--description">
<h3>Yellow Chair<sup class="price--hot">Clearance!</sup></h3>
<div class="product__list__item--icons">
<span id="heart"><a href=" "><i id="heart--liked" class="far fa-heart fa-2x"></i></a></span>
<span id="addtocart"><a href=" "><i class="fas fa-cart-plus fa-2x"></i></a></span>
</div>
<div class="product__list__item--price price--hot">$189
<sub class="price__sale">$109</sub>
</div>
</div>
</a>
</div>
</body>
</html>
&#13;
我希望它有所帮助。
答案 1 :(得分:-1)
$未定义,因为括号内有名称。所以你只有很多没有名字的变量......
$document.ready(function() {
$heart.click(function() {
$heart-liked.toggle('1000');
});
$heart.a.click(function(e) {
e.stopPropagation();
});
});