\$\begingroup\$
\$\endgroup\$
0
I am trying to detect whether a condition is being returned true or false. The only problem is, I have a bunch of if
/else
statements. Is it possible to refactor this in less lines? Maybe a for
loop or re-writing my markup?
$(document).on('click', '.cert-modal-btn', function(event) {
event.preventDefault();
var $this = $(this);
certNcv = $this.data("ncv"),
certDealer = $this.data("cert"),
certExpress = $this.data("express"),
certOne = $this.data("dealone"),
certPromise = $this.data("iscustomer"),
certEcomm = $this.data("isecomm"),
$tabbedMenu = $('.tabbed-menu').find('li'),
$certsDescription = $('.certs-description').find('li');
if(certNcv) {
console.log("certNcv is true");
$tabbedMenu.eq(0).removeClass('hidden-item');
$certsDescription.eq(0).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(0).addClass('hidden-item');
$certsDescription.eq(0).addClass('hidden-item');
}
if (certExpress == "X") {
console.log("certExpress is X");
$tabbedMenu.eq(1).removeClass('hidden-item');
$certsDescription.eq(1).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(1).addClass('hidden-item');
$certsDescription.eq(1).addClass('hidden-item');
}
if(certEcomm) {
console.log("certEcomm is true");
$tabbedMenu.eq(2).removeClass('hidden-item');
$certsDescription.eq(2).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(2).addClass('hidden-item');
$certsDescription.eq(2).addClass('hidden-item');
}
if(certOne) {
console.log("certOne is true");
$tabbedMenu.eq(3).removeClass('hidden-item');
$certsDescription.eq(3).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(3).addClass('hidden-item');
$certsDescription.eq(3).addClass('hidden-item');
}
if(certPromise) {
console.log("certPromise is true");
$tabbedMenu.eq(4).removeClass('hidden-item');
$certsDescription.eq(4).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(4).addClass('hidden-item');
$certsDescription.eq(4).addClass('hidden-item');
}
if(certDealer) {
console.log("certDealer is true");
$tabbedMenu.eq(5).removeClass('hidden-item');
$certsDescription.eq(5).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(5).addClass('hidden-item');
$certsDescription.eq(5).addClass('hidden-item');
}
// console.log(certNcv);
// console.log(certDealer);
});
Jamal
35.2k13 gold badges134 silver badges238 bronze badges
1 Answer 1
\$\begingroup\$
\$\endgroup\$
2
If you start with an array:
let certs = ["ncv", "cert", "express", "dealone", "iscustomer", "isecomm"];
then it reduces down to a for loop.
for (int i = 0; i < certs.length; i++) {
if ($this.data(certs[i])) {
console.log(certs[i] + " is true");
$tabbedMenu.eq(i).removeClass('hidden-item');
$certsDescription.eq(i).removeClass('hidden-item');
}
else {
$tabbedMenu.eq(i).addClass('hidden-item');
$certsDescription.eq(i).addClass('hidden-item');
}
}
answered Jun 15, 2016 at 14:47
-
1\$\begingroup\$ Your test
if (certs[i])
doesn't make sense. It needs to beif ($this.data(certs[i]))
. \$\endgroup\$RoToRa– RoToRa2016年06月15日 14:53:57 +00:00Commented Jun 15, 2016 at 14:53 -
1\$\begingroup\$ Nice solution, but let me add that this does not take into account the special handling of
(certExpress == "X")
\$\endgroup\$Mike Scotty– Mike Scotty2016年06月15日 15:05:03 +00:00Commented Jun 15, 2016 at 15:05
default