if/else-if语句未添加类时出现问题
Issues with if/else-if statement not adding class
目标
我有一份60名曲棍球运动员的名单。当每个位置的球员(守门员、防守队员、前锋(的最大数量被选中时,应该发生两件事:
is-completed
的类被添加到icon-checkmark
应将其从灰色变为黄色,以显示任务已完成- 该位置的其他未被选中的球员应由于.css((
pointer-events: none
而无法单击
问题
a(类is-completed
只被添加到checkmark--goalie
中,而没有添加与其他位置相关的其他复选标记,所以我觉得if/else-if语句有问题。
b(即使选择了其位置上的最大球员数量(2名守门员、6名防守队员、12名前锋(,您仍然可以点击is-inactive
级别的其他球员
index.html
// Checkmarks
<section class="main__selected">
<p class="main__check"><i class="icon-checkmark checkmark--goalie fa fa-check" aria-hidden="true"></i>Pick 2 out of 10 of the goalies</p>
<p class="main__check"><i class="icon-checkmark checkmark--defencemen fa fa-check" aria-hidden="true"></i>Pick 6 out of the 20 defencemen</p>
<p class="main__check"><i class="icon-checkmark checkmark--forward fa fa-check" aria-hidden="true"></i>Pick 12 of the 30 forwards</p>
</section> <!-- .main__selected -->
// Player
<div class="player player--goalie year--1990">
<div class="tooltip tooltip--tall">
<p class="tooltip__name">Brian Elder</p>
<p class="tooltip__hometown"><span>Hometown:</span> Oak Lake, Man.</p>
<p class="tooltip__years"><span>Years Played:</span> 1992-1997</p>
<div class="tooltip__stats--inline">
<div class="stats__group stats--goalsag">
<p class="stats__header">GA</p>
<p class="stats__number">2.00</p>
<p class="stats__number">3.12</p>
<p class="stats__number">3.46</p>
<p class="stats__number">2.70</p>
</div>
<div class="stats__group stats--save">
<p class="stats__header">SAV%</p>
<p class="stats__number">.909</p>
<p class="stats__number">.886</p>
<p class="stats__number">.884</p>
<p class="stats__number">.906</p>
</div>
<div class="stats__group stats--shutouts">
<p class="stats__header">SO</p>
<p class="stats__number">0</p>
<p class="stats__number">0</p>
<p class="stats__number">3</p>
<p class="stats__number">2</p>
</div>
</div> <!-- tooltip__stats--inline -->
</div> <!-- tooltip -->
<div class="player__headshot player--elder">
<div class="picked is-inactive"><i class="fa fa-star" aria-hidden="true"></i></div>
</div>
<p class="player__name">Brian Elder</p>
<p class="player__position">Goalie</p>
</div>
scripts.js(片段(
/*-------------------------------------
COUNT SELECTED
--------------------------------------*/
function countSelected() {
$(".player").on("click", function(){
// Count the number of players with stars
var starredGoaltenders = $(".player--goalie").find(".picked.is-active").length;
var starredDefencemen = $(".player--defencemen").find(".picked.is-active").length;
var starredForwards = $(".player--forward").find(".picked.is-active").length;
console.log(starredGoaltenders, starredDefencemen, starredForwards);
// The number of starred players for each position cannot exceed the following numbers
var maxGoaltenders = 2;
var maxDefencemen = 6;
var maxFowards = 12;
// If the number of starred players hits its max, the other unstarred players in that group cannot be clicked unless one is deselected first
if (starredGoaltenders === maxGoaltenders) {
$(".checkmark--goalie").addClass("is-completed");
$(".player--goalie").find(".picked.is-inactive").css("pointer-events", "none");
} else if (starredDefencemen === maxDefencemen) {
$(".checkmark--defencemen").addClass("is-completed");
$(".player--defencemen").find(".picked.is-inactive").css("pointer-events", "none");
} else if (starredForwards === maxFowards) {
// Not working unless done first?
$(".checkmark--forward").addClass("is-completed");
$(".player--forward").find(".picked.is-inactive").css("pointer-events", "none");
}
});
} countSelected();
超板,
a(正如Simon所说,哈哈,条件只处理一个真实的条件,在满足第一个"真实"条件后,它不关心另一个。它们可以同时为真,所以只需将其分解为3个if语句
部分b(Click EventListener在"播放器"类上,您将指针事件设置为picked.is-inactive…因此您必须在点击事件的顶部进行检查:
if ($(this).find('.picked.is-inactive').css('pointer-events') === "none") return;
最终解决方案
function countSelected() {
$(".player").on("click", function(){
// Checks if the maximum number of players have been selected
// If so, return false and then do nothing
// If not, the class will toggle from `is-inactive` to `is-active`
if ($(this).find(".picked.full").length > 0) return false;
$(this).find(".picked").toggleClass("is-inactive is-active");
// Count the number of players with stars
var starredGoaltenders = $(".player--goalie").find(".picked.is-active").length;
var starredDefencemen = $(".player--defencemen").find(".picked.is-active").length;
var starredForwards = $(".player--forward").find(".picked.is-active").length;
console.log(starredGoaltenders, starredDefencemen, starredForwards);
// The number of starred players for each position cannot exceed the following numbers
var maxGoaltenders = 2;
var maxDefencemen = 6;
var maxFowards = 12;
// If the number of starred players hits its max, a class of `is-completed` is adding to the corresponding checkmark to indicate that the task has been completed
// Class of `full` is a placeholder, but it also removes the cursor:pointer
if (starredGoaltenders === maxGoaltenders) {
$(".checkmark--goalie").addClass("is-completed");
$(".player--goalie").find(".picked").addClass("full");
}
if (starredDefencemen === maxDefencemen) {
$(".checkmark--defencemen").addClass("is-completed");
$(".player--defencemen").find(".picked").addClass("full");
}
if (starredForwards === maxFowards) {
$(".checkmark--forward").addClass("is-completed");
$(".player--forward").find(".picked").addClass("full");
}
});
} countSelected();
您应该将if/ese条件更改为
if (starredGoaltenders === maxGoaltenders) {
$(".checkmark--goalie").addClass("is-completed");
$(".player--goalie").find(".picked.is-inactive").css("pointer-events", "none");
}
else {
$(".checkmark--goalie").removeClass("is-completed");
$(".player--goalie").find(".picked.is-inactive").css("pointer-events", "auto");
}
if (starredDefencemen === maxDefencemen) {
$(".checkmark--defencemen").addClass("is-completed");
$(".player--defencemen").find(".picked.is-inactive").css("pointer-events", "none");
}
else {
...
}
if (starredForwards === maxFowards) {
// Not working unless done first?
$(".checkmark--forward").addClass("is-completed");
$(".player--forward").find(".picked.is-inactive").css("pointer-events", "none");
}
else {
...
}
问题是,如果第一个条件是真的,那么其他条件就不会再被处理了。您还应该为每个if
条件添加一个else
,以便在用户取消选择活动播放器时恢复更改。
相关文章:
- javascript中添加验证电子邮件的问题
- 关于使用Animate.css向和项添加和删除动画类的问题
- 选中复选框的Jquery/Javascript问题使用输入框操作将行从一个表添加到另一个表
- 在对象中添加方法时出现问题
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- 第二次追加后添加逗号的问题等等
- array_push平面数组问题-需要能够向数组中添加多个变量
- 动态创建foreignGroup并将其添加到svg中有什么问题
- 以编程方式将特定的JavaScript添加到Qualtrics中的特定问题中
- Ruby on Rails 4:在 Rails Web 应用程序中添加 Javascript 文件时遇到问题
- 图像上传功能将++(+1)副本添加到下一次上传.出了什么问题或如何重置“选定图像”
- 我在添加更多输入字段时遇到问题,文本字段中的值不会保留
- 使用jQuery添加的类时出现问题
- 设置和添加数组值javascript时出现问题
- mongodb用户配置文件添加输入时出现问题
- 在wordpress中向自定义php模板添加滑块时出现问题
- 将类添加到标头的代码有什么问题
- Magento - 原型.js和jQuery问题 - 添加到购物车按钮
- 扩展jQuery的问题(添加调试特性)
- 问题添加点击事件处理程序与JQuery移动在Android浏览器