2017-08-09 118 views
1

好吧,所以我必須禁用其他複選框,當一個是活動的,並設法保持我的手風琴面板的過渡動畫,但我不知道如何切換面板一旦我點擊「是」複選框。 當你點擊「YES」複選框時,你仍然需要點擊第一個手風琴面板才能打開它。我一直在尋找的是當我點擊「是」複選框時,它應該切換面板。如何使用複選框和僅複選框切換手風琴菜單?

到目前爲止,這是我事先得到了

<script> 
 
\t \t \t 
 
\t var acc = document.getElementsByClassName("accordion_1"); 
 
\t var i; 
 

 
\t for (i = 0; i < acc.length; i++) { 
 
\t acc[i].onclick = function() { 
 
\t \t this.classList.toggle("active"); 
 
\t \t var panel = this.nextElementSibling; 
 
\t \t if (panel.style.maxHeight){ 
 
\t \t panel.style.maxHeight = null; 
 
\t \t } else { 
 
\t \t panel.style.maxHeight = panel.scrollHeight + "px"; 
 
\t \t } 
 
\t } 
 
\t } 
 
\t 
 
\t $(document).ready(function() { 
 
\t \t $('#check_main').change(function() { 
 
\t \t \t $('#panel_main').toggle(); 
 

 
\t \t \t var acc = document.getElementsByClassName("accordion_main"); 
 
\t \t \t var i; 
 
\t 
 
\t \t \t for (i = 0; i < acc.length; i++) { 
 
\t \t \t \t acc[i].onclick = function() { 
 
\t \t \t \t \t this.classList.toggle("active"); 
 
\t \t \t \t \t var panel = this.nextElementSibling; 
 
\t \t \t \t \t if (panel.style.maxHeight){ 
 
\t \t \t \t \t \t panel.style.maxHeight = null; 
 
\t \t \t \t \t } else { 
 
\t \t \t \t \t \t panel.style.maxHeight = panel.scrollHeight + "px"; 
 
\t \t \t \t \t } 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t }); 
 
\t }); 
 
\t $(".checkbx, .GrpChk").change(function() { 
 
\t \t this.checked ? $("." + this.className).not(this).prop("disabled", true):$("." + this.className).not(this).prop("disabled", false); 
 
\t }); 
 
</script>
button.accordion_1{ 
 
background-color: #eee; 
 
color: #444; 
 
cursor: pointer; 
 
padding: 18px; 
 
width: 100%; 
 
border: none; 
 
text-align: left; 
 
outline: none; 
 
font-size: 15px; 
 
transition: 0.4s; 
 
} 
 

 
button.accordion_1.active, button.accordion:hover { 
 
background-color: #ddd; 
 
} 
 

 
div.panel { 
 
padding: 0 18px; 
 
background-color: white; 
 
max-height: 0; 
 
overflow: hidden; 
 
transition: max-height 0.2s ease-out; 
 
} 
 

 
button.accordion_main{ 
 
background-color: #eee; 
 
color: #444; 
 
cursor: pointer; 
 
padding: 18px; 
 
width: 100%; 
 
border: none; 
 
text-align: left; 
 
outline: none; 
 
font-size: 15px; 
 
transition: 0.4s; 
 
} 
 

 
button.accordion_main.active, button.accordion:hover { 
 
background-color: #ddd; 
 
} 
 

 
div.panel_main{ 
 
padding: 0 18px; 
 
background-color: white; 
 
max-height: 0; 
 
overflow: hidden; 
 
transition: max-height 0.2s ease-out; 
 
}
<div class="box item1"> 
 
\t \t <button class="accordion_main" id="check_holder"> TOTALLY RANDOM TEXT FOR TESTING 
 
\t \t \t <div class="check_box"> \t 
 
\t \t \t \t <span> 
 
\t \t \t \t \t <form name="aForm" action=""> 
 
\t \t \t \t \t \t <p> 
 
\t \t \t \t \t \t <label> 
 
\t \t \t \t \t \t \t <!--<input type="checkbox" name="check" id="check" value="1"> YES--> 
 
\t \t \t \t \t \t \t <input class="checkbx" id="check_main" name="Role" type="checkbox" value="yes"/>YES 
 
\t \t \t \t \t \t </label> 
 
\t \t \t \t \t \t <label> 
 
\t \t \t \t \t \t \t <input class="checkbx" name="Role" type="checkbox" value="no"/> NO 
 
\t \t \t \t \t \t </label> 
 
\t \t \t \t \t \t </p> 
 
\t \t \t \t \t </form> 
 
\t \t \t \t </span> 
 
\t \t \t </div> 
 
\t \t </button> 
 
\t \t <div class="panel_main" id="panel_main" style="display:none;"> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> 
 
\t \t </div> 
 
\t \t <button class="accordion_1">Section 2</button> 
 
\t \t <div class="panel"> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> 
 
\t \t </div> 
 
\t \t <button class="accordion_1">Section 3</button> 
 
\t \t <div class="panel"> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> 
 
\t \t </div> 
 
\t </div>
再次,感謝球員,我一直工作在這兩天了,任何幫助十分讚賞!

回答

0

給與第2部分和第3部分的按鈕相關的課程一個不同的名稱。

var acc = document.getElementsByClassName("accordion"); 
 
var i; 
 

 
for (i = 0; i < acc.length; i++) { 
 
    acc[i].onclick = function() { 
 
    this.classList.toggle("active"); 
 
    var panel = this.nextElementSibling; 
 
    if (panel.style.maxHeight) { 
 
     panel.style.maxHeight = null; 
 
    } else { 
 
     panel.style.maxHeight = panel.scrollHeight + "px"; 
 
    } 
 
    } 
 
}
button.accordion, button.accordionn { 
 
    background-color: #eee; 
 
    color: #444; 
 
    cursor: pointer; 
 
    padding: 18px; 
 
    width: 100%; 
 
    border: none; 
 
    text-align: left; 
 
    outline: none; 
 
    font-size: 15px; 
 
    transition: 0.4s; 
 
} 
 

 
button.accordion.active, 
 
button.accordion:hover { 
 
    background-color: #ddd; 
 
} 
 

 
div.panel { 
 
    padding: 0 18px; 
 
    background-color: white; 
 
    max-height: 0; 
 
    overflow: hidden; 
 
    transition: max-height 0.2s ease-out; 
 
}
<div class="wrapper"> 
 
    <div class="box item1"> 
 
    <button class="accordion" style="align:right;"> TOTALLY RANDOM TEXT FOR TESTING 
 
      <ul style="display:in-line;"> 
 
       <li> 
 
        <input type="checkbox" id="check1" /> 
 
        <label for="check1">YES</label> 
 
       </li> 
 
       <li> 
 
        <input type="checkbox" id="check2" /> 
 
        <label for="check2">NO</label> 
 
       </li> 
 
      </ul> 
 
     </button> 
 
    <div class="panel"> 
 
     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> 
 
    </div> 
 

 
    <button class="accordionn">Section 2</button> 
 
    <div class="panel"> 
 
     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> 
 
    </div> 
 

 
    <button class="accordionn">Section 3</button> 
 
    <div class="panel"> 
 
     <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> 
 
    </div> 
 
    </div> 
 
</div>

+0

謝謝,但第一個面板仍然打開點擊,我希望它打開時,只有當你點擊「是」複選框。我不太確定如何做到這一點。如果它通過使用JavaScript我完全不知道從哪裏開始。 感謝您的答覆。 – Genobee

+0

對不起,我明白了謝謝你! – Genobee

+0

不客氣。祝你的項目好運 – Gerard

0

我得到了它的傢伙! 以供參考這裏是我正在嘗試做的事情。

<div class="box item1"> 
      <button class="accordion_main" id="check_holder"> TOTALLY RANDOM TEXT FOR TESTING 
       <div class="check_box"> 
        <span> 
         <form name="aForm" action=""> 
          <p> 
          <label> 
           <!--<input type="checkbox" name="check" id="check" value="1"> YES--> 
           <input class="checkbx" id="check_main" name="Role" type="checkbox" value="yes"/>YES 
          </label> 
          <label> 
           <input class="checkbx" name="Role" type="checkbox" value="no"/> NO 
          </label> 
          </p> 
         </form> 
        </span> 
       </div> 
      </button> 
      <div class="panel_main" id="panel_main" style="display:none;text-align:center;"> 
       <div class="wrapper_acc"> 
        <div class="box_acc a_acc">A</div> 
        <div class="box_acc b_acc">B</div> 
        <div class="box_acc c_acc">C</div> 
        <div class="box_acc d_acc">D</div> 
        <div class="box_acc e_acc">E</div> 
        <div class="box_acc f_acc">F</div> 
       </div> 
      </div> 

<script> 
     var acc = document.getElementsByClassName("accordion_1"); 
     var i; 

     for (i = 0; i < acc.length; i++) { 
      acc[i].onclick = function() { 
      this.classList.toggle("active"); 
      var panel = this.nextElementSibling; 
      if (panel.style.maxHeight){ 
       panel.style.maxHeight = null; 
      } else { 
       panel.style.maxHeight = panel.scrollHeight + "px"; 
      } 
      } 
     } 

     $(document).ready(function() { 
      $('#check_main').change(function() { 
       $('#panel_main').toggle("fast","linear"); 

      }); 
     }); 
     $(".checkbx, .GrpChk").change(function() { 
      this.checked ? $("." + this.className).not(this).prop("disabled", true):$("." + this.className).not(this).prop("disabled", false); 
     }); 
    </script> 

而是採用對其他2片相同的過渡效果,我用這個代替

$('#panel_main').toggle("fast","linear"); 

,如果你注意到我打消了我的CSS div.panel。 達是我的主要錯誤,我的CSS是js的衝突。多謝你們!