Search code examples
javascripthtmlfunctiontogglechecked

Show and Hide a <iframe> with a toggle using ":checked"


I got stuck with the JS. I first had 2 buttons and the "onClick" function but i want to "upgrade" these now to the toggle. With this JS the video show/hide function and the switch slide doesn't work. I want to show the video when the switch is checked.

Can someone help me with the JS?

function showVideo(){
$("#video").hide();
$("#cb1").click(function() {
    if($(this).is(":checked")) {
        $("#video").show(300);
    } else {
        $("#video").hide(200);
    }
});
}
.tgl {
  display: none;
}

.tgl + .tgl-btn {
  outline: 0;
  display: block;
  width: 4em;
  height: 2em;
  position: relative;
  cursor: pointer;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
}

.tgl + .tgl-btn:after, .tgl + .tgl-btn:before {
  position: relative;
  display: block;
  content: "";
  width: 50%;
  height: 100%;
}

.tgl + .tgl-btn:after {
  left: 0;
}

.tgl + .tgl-btn:before {
  display: none;
}

.tgl:onClick + .tgl-btn:after {
  left: 50%;
}

.tgl-light + .tgl-btn {
  background: #f0f0f0;
  border-radius: 2em;
  padding: 2px;
  -webkit-transition: all .4s ease;
  transition: all .4s ease;
}

.tgl-light + .tgl-btn:after {
  border-radius: 50%;
  background: #fff;
  -webkit-transition: all .2s ease;
  transition: all .2s ease;
}

.tgl-light:checked + .tgl-btn {
  background: #9FD6AE;
} 
<input class="tgl tgl-light" id="cb1" type="checkbox"/>
<label class="tgl-btn" for="cb1"></label>

<iframe id="video" style='width:360px; height: 190px; border: none' src="https://www.youtube.com/embed/owsfdh4gxyc"></iframe>


Solution

  • Just don't include the ("#cb1").click(... inside a function. showVideo() is actually never called anywhere, so the event handlers aren't added:

    $("#video").hide();
    $("#cb1").click(function() {
        console.log($(this).is(":checked"));
        if($(this).is(":checked")) {
            $("#video").show(300);
        } else {
            $("#video").hide(200);
        }
    });
    .tgl {
      display: none;
    }
    
    .tgl + .tgl-btn {
      outline: 0;
      display: block;
      width: 4em;
      height: 2em;
      position: relative;
      cursor: pointer;
      -webkit-user-select: none;
         -moz-user-select: none;
          -ms-user-select: none;
              user-select: none;
    }
    
    .tgl + .tgl-btn:after, .tgl + .tgl-btn:before {
      position: relative;
      display: block;
      content: "";
      width: 50%;
      height: 100%;
    }
    
    .tgl + .tgl-btn:after {
      left: 0;
    }
    
    .tgl + .tgl-btn:before {
      display: none;
    }
    
    .tgl:onClick + .tgl-btn:after {
      left: 50%;
    }
    
    .tgl-light + .tgl-btn {
      background: #f0f0f0;
      border-radius: 2em;
      padding: 2px;
      -webkit-transition: all .4s ease;
      transition: all .4s ease;
    }
    
    .tgl-light + .tgl-btn:after {
      border-radius: 50%;
      background: #fff;
      -webkit-transition: all .2s ease;
      transition: all .2s ease;
    }
    
    .tgl-light:checked + .tgl-btn {
      background: #9FD6AE;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <input class="tgl tgl-light" id="cb1" type="checkbox"/>
    <label class="tgl-btn" for="cb1"></label>
    
    <iframe id="video" style='width:360px; height: 190px; border: none' src="https://www.youtube.com/embed/owsfdh4gxyc"></iframe>