简体   繁体   English

如何在单击单选按钮时显示相应的 div

[英]How to show respective div on clicking a radio button

I want to show respective divs when clicked on the radio button.单击单选按钮时,我想显示相应的 div。 div and radio buttons are on different plains thus I am not able to do this using input:checked +.descendingelement method. div 和单选按钮位于不同的平原上,因此我无法使用input:checked +.descendingelement方法执行此操作。 I have created a codepen.我创建了一个代码笔。 My aim is that if i click on Albums radio button then only the div related to albums should be visible.我的目标是,如果我点击专辑单选按钮,那么只有与专辑相关的 div 应该可见。 and if i click on articles radio button articles' div should be visible.如果我点击文章单选按钮文章的 div 应该是可见的。 If possible to do so using css only please help me or I need to use javascript for this.如果可能的话,请仅使用 css 来帮助我,否则我需要为此使用 javascript。 Initially Articles should be visible.最初文章应该是可见的。

在此处输入图像描述

<div class="creator-programs">
    <div class="programTitles">
        <div class="programTitles-inner">
            <input type="radio" name="programdivs" id="albums" data-target="Albums" class="programButton" checked>
            <label for="albums" id="albumsLabel" class="programlabel">Albums</label>

            <input type="radio" name="programdivs" id="articles" data-target="ARTICLES BY" class="programButton">
            <label for="articles" class="programlabel">Articles</label>

            <input type="radio" name="programdivs" id="documents" data-target="DOCUMENTS BY" class="programButton">
            <label for="documents" class="programlabel">Documents</label>

            <input type="radio" name="programdivs" id="subs" data-target="SUBSCRIPTIONS OF" class="programButton">
            <label for="subs" class="programlabel">Subscriptions</label>

            <input type="radio" name="programdivs" id="workshops" data-target="WORKSHOPS BY" class="programButton">
            <label for="workshops" class="programlabel">Workshops</label>

            <input type="radio" name="programdivs" id="recs" data-target="RECS BY" class="programButton">
            <label for="recs" class="programlabel">Recs</label>
        </div>
    </div>
    <div class="programValues">
        <div class="programTitle">
            <h1 class="title-target">ALBUMS BY </h1> <h1 class="programHeading">&nbsp; SAMPAT</h1>
        </div>
        <div class="program-content">
            <div class="program-data-div" id="albumsContainer">
                This will contain albums
            </div>
            <div class="program-data-div" id="articlesContainer">
                This will contain Articles
            </div>
            <div class="program-data-div" id="documentsContainer">
                This will contain Documents
            </div>
            <div class="program-data-div" id="subContainer">
                This will contain Subscriptions
            </div>
            <div class="program-data-div" id="workshopsContainer">
                This will contain Workshops
            </div>
            <div class="program-data-div" id="recsContainer">
                This will contain Recs
            </div>
        </div>
    </div>

</div>

.creator-programs{
  font-family:Montserrat, sans-serif ;
  display:grid;
  grid-template-columns: 1fr 5fr;
  margin:20px 2.4em;
  padding:15px 8px;
  background-color:#333;
  border-radius:8px;
}
.programTitles-inner{
  display:flex;
  flex-direction: column;
  gap:20px;
}
.programTitles-inner input:checked + label{
  background:#F0F0F0;
  color:#000;
  transition:all 0.8s ease-in;

}
.programButton{
  userselect:none;
  border:none;
  display:none;
  border:none;
  border-radius:10px;
  padding:10px 20px;
  width:200px;
  font-size:1.3rem;
  font-weight:700;
  cursor:pointer;
  background:none;
  color:#fff;
}
.programlabel{
  border:none;
  border:none;
  border-radius:10px;
  padding:10px 20px;
  text-align: center;
  width:200px;
  font-size:1.3rem;
  font-weight:700;
  cursor:pointer;
  background:none;
  color:#fff;
  transition:all 0.8s ease-out;
}
.programTitle{
  display:flex;
}
.programTitles-inner input:checked + label{
  background:#F0F0F0;
  color:#000;
  transition:all 0.8s ease-in;

}
.program-data-div{
  display:none;
}
#albums:checked .program-data-div:first-child{
  display: flex !important;;
}
.programButton:focus{
  border:none;
}
.programValues{
  color:#fff;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.programTitles-inner{
  display:flex;
  flex-direction: column;
  gap:20px;
}

let progButtons = document.querySelectorAll(".programButton")
progButtons.forEach(function (progbtn) {
    progbtn.addEventListener('click', function(event){
        // console.log(event.target.getAttribute("data-target"))
        document.querySelector(".title-target").innerHTML = event.target.getAttribute("data-target")

})
})

codepen: https://codepen.io/sampat-28/pen/KKeJyMg代码笔: https://codepen.io/sampat-28/pen/KKeJyMg

I give you a javascript solution, the progButtons.forEach function will be changed as below:我给你一个 javascript 的解决方案,将 progButtons.forEach function 改成如下:

 progButtons.forEach(function (progbtn) { progbtn.addEventListener('click', function(event){ // console.log(event.target.getAttribute("data-target")) document.querySelector(".title-target").innerHTML = event.target.getAttribute("data-target") let progContents=document.querySelector(".program-content").children; for (let i=0;i<progContents.length;i++){ if (progContents[i].id===(event.target.id+"Container")){ progContents[i].className=""; }else{ progContents[i].className="program-data-div"; } } }) })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM