Javascript, функция открытия / закрытия - PullRequest
0 голосов
/ 19 ноября 2018

Я очень новичок в использовании Javascript, и я изо всех сил пытаюсь добиться того, чего я хочу.Я создал 4 кнопки, используя;

<input type="button" name="answer" value="Brave" onclick="showDiv()">

Моя цель состоит в том, чтобы, если вы нажмете на кнопку, она изменит состояние и появится div (зашел так далеко).Если я нажму еще одну кнопку, я бы хотел, чтобы содержимое скрывало предыдущий выбранный div и показывало то, на которое они только что нажали.

Любая помощь / руководство действительно будут оценены.

function showDiv() {
document.getElementById('BraveDiv').style.display = "block";
}
function showDiv1() {
document.getElementById('DeterminedDiv').style.display = "block";
}
function showDiv2() {
document.getElementById('CompassionateDiv').style.display = "block";
}
function showDiv3() {
document.getElementById('ConsiderateDiv').style.display = "block";
}

Моя цель состоит в том, чтобы, если бы вы нажали

Ответы [ 5 ]

0 голосов
/ 19 ноября 2018
function showDiv() 
{
    document.getElementById('new1').style.display = "block";
    document.getElementById('Div1').style.display = "none";
    document.getElementById('Div2').style.display = "none";
}
function showDiv1() 
{
    document.getElementById('Div1').style.display = "block";
    document.getElementById('new1').style.display = "none";
    document.getElementById('Div2').style.display = "none";
}
function showDiv2() 
{
    document.getElementById('Div2').style.display = "block";
    document.getElementById('new1').style.display = "none";
    document.getElementById('Div1').style.display = "none";
}
0 голосов
/ 19 ноября 2018

$(document).ready(function() {
    $("#btn1").click(function(){
        showDiv('div1');
    });
    $("#btn2").click(function(){
        showDiv('div2');
    });
    $("#btn3").click(function(){
        showDiv('div3');
    });
    $("#btn4").click(function(){
        showDiv('div4');
    });    
});

function showDiv(_divId){
	$(".div-class").each(function() {
    	if(!$(this).hasClass('div-hide'))
        $(this).addClass('div-hide');
	});
        
	$('#' + _divId).removeClass('div-hide');
}
.div-class {
    	min-height: 50px;
        border: 1px solid #eee;
        margin: 10px;
        padding: 10px;
        width: 100%;
    }
    .div-hide {
    	display: none;
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button id="btn1">Button 1</button>
<button id="btn2">Button 2</button>
<button id="btn3">Button 3</button>
<button id="btn4">Button 4</button>

<div id="div1" class='div-class div-hide'><h3>Div1 Content </h3></div>
<div id="div2" class='div-class div-hide'><h3>Div2 Content </h3></div>
<div id="div3" class='div-class div-hide'><h3>Div3 Content </h3></div>
<div id="div4" class='div-class div-hide'><h3>Div4 Content </h3></div>
0 голосов
/ 19 ноября 2018
function showDiv() {
document.getElementById('BraveDiv').style.display = "block";
document.getElementById('DeterminedDiv').style.display = "none";
document.getElementById('CompassionateDiv').style.display = "none";
document.getElementById('ConsiderateDiv').style.display = "none";
}
function showDiv1() {
document.getElementById('BraveDiv').style.display = "none";
document.getElementById('DeterminedDiv').style.display = "block";
document.getElementById('CompassionateDiv').style.display = "none";
document.getElementById('ConsiderateDiv').style.display = "none";
}
function showDiv2() {
document.getElementById('BraveDiv').style.display = "none";
document.getElementById('DeterminedDiv').style.display = "none";
document.getElementById('CompassionateDiv').style.display = "block";
document.getElementById('ConsiderateDiv').style.display = "none";
}
function showDiv3() {
document.getElementById('BraveDiv').style.display = "none";
document.getElementById('DeterminedDiv').style.display = "none";
document.getElementById('CompassionateDiv').style.display = "none";
document.getElementById('ConsiderateDiv').style.display = "block";
}

Это может быть не самый элегантный способ сделать это, но даст вам результаты, которые вы хотите. При нажатии каждой кнопки все остальные закроются.

0 голосов
/ 19 ноября 2018

Вам просто нужно установить стиль display оставшихся <div> s обратно на none.Простейший способ сделать это - сначала установить все из них на none, а затем тот, который вы хотите видеть block:

Примечание: я использовалфункция, которая принимает идентификатор цели <div> в качестве параметра, чтобы уменьшить объем написанного кода, но вы можете легко скопировать и вставить в отдельные функции, если вам нужно.

function showDiv(divName) {
  // First hide all the divs
  document.getElementById('BraveDiv').style.display = 'none';
  document.getElementById('DeterminedDiv').style.display = 'none';
  document.getElementById('CompassionateDiv').style.display = 'none';
  document.getElementById('ConsiderateDiv').style.display = 'none';
  
  // Then show the div corresponding to the button clicked
  document.getElementById(divName).style.display = 'block';
}
<input type="button" value="Brave" onclick="showDiv('BraveDiv')">
<input type="button" value="Determined" onclick="showDiv('DeterminedDiv')">
<input type="button" value="Compassionate" onclick="showDiv('CompassionateDiv')">
<input type="button" value="Considerate" onclick="showDiv('ConsiderateDiv')">

<div id="BraveDiv" style="display: none">BraveDiv</div>
<div id="DeterminedDiv" style="display: none">DeterminedDiv</div>
<div id="CompassionateDiv" style="display: none">CompassionateDiv</div>
<div id="ConsiderateDiv" style="display: none">ConsiderateDiv</div>

Существуют альтернативные способы сделать это, которые требуют меньше кода, например, этот метод с использованием небольшого количества CSS и document.querySelectorAll():

function showDiv(divName) {
  // First remove the selected class from all divs in output-divs
  document.querySelectorAll('#output-divs > .selected').forEach(element => {
    element.classList.remove('selected');
  });
  
  // Then add it to the div corresponding to the button clicked
  document.getElementById(divName).classList.add('selected');
}
.output-div:not(.selected) {
  display: none;
}
<input type="button" value="Brave" onclick="showDiv('brave')">
<input type="button" value="Determined" onclick="showDiv('determined')">
<input type="button" value="Compassionate" onclick="showDiv('compassionate')">
<input type="button" value="Considerate" onclick="showDiv('considerate')">

<div id="output-divs">
  <div class="output-div selected" id="brave">Brave</div>
  <div class="output-div" id="determined">Determined</div>
  <div class="output-div" id="compassionate">Compassionate</div>
  <div class="output-div" id="considerate">Considerate</div>
</div>
0 голосов
/ 19 ноября 2018

Ваш код не даст никаких результатов, которые вы ищете, однако, очевидно, что вы ищете.

Ваши кнопки должны выглядеть следующим образом:

<button role="button" onclick="showDiv('BraveDiv')">Brave</button>

Здесь роль предотвращает поведение отправки по умолчанию.Onclick сообщает кнопке, что делать, когда вы нажимаете на нее, и «BraveDiv» - это параметр, который мы передадим функции, сообщая ей, какой div отображать.

DIV, связанный с вышеуказанной кнопкой, долженвыглядит следующим образом:

<div id="BraveDiv" style="display: none;"> SOME CONTENT HERE </div>

Здесь вы заметите, что идентификатор равен параметру, который мы упомянули выше.

И ваш JavaScript должен работать следующим образом:

<script>

function showDiv(elem){
document.getElementById(elem).style.display = "block";      

}

</script>

Я прикрепил рабочий пример, как показано ниже, просто нажмите «Выполнить фрагмент кода», чтобы просмотреть фрагмент и проверить код.

function showDiv(elem) {
  document.getElementById(elem).style.display = "block";
}
<button role="button" onclick="showDiv('BraveDiv')">Brave</button>
<button role="button" onclick="showDiv('CompassionateDiv')">Compassionate</button>


<div id="BraveDiv" style="display: none;"> SOME BRAVE CONTENT HERE </div>
<div id="CompassionateDiv" style="display: none;"> SOME COMPASSIONATE CONTENT HERE </div>

Выше, однако, только покажут ваши DIVS.

Полное решение jQuery для этого (скрыть / показать согласно тегу)будет выглядеть следующим образом:

<script>   

    function showDiv(elem) { // When the button is pressed
    $("div").each(function() { // For each Div
        if ($(this).attr('id') != elem) { // If the Div's id is not equal to the parameter
          $(this).css("display", "none");
        } // HIDE IT
        else {
          $(this).css("display", "block"); // SHow It
        });

</script>

Если вы не знакомы с jQuery и предпочитаете решение только на JavaScript, то:

<script>

function showDiv(elem){

var divsToCheck = ["BraveDiv", "CompassionateDiv"]; // Add to here to check more divs
for(let i = 0; i < divsToCheck.length; i++){
if(divsToCheck[i] == elem){
document.getElementById(divsToCheck[i]).style.display = "block";
    }

else{
document.getElementById(divsToCheck[i]).style.display = "none";
    }

}
</script>

Снова я прикрепил фрагмент ниже.

function showDiv(elem) {

  var divsToCheck = ["BraveDiv", "CompassionateDiv"]; // Add to here to check more divs
  for (var i = 0; i < divsToCheck.length; i++) {
    if (divsToCheck[i] == elem) {
      document.getElementById(divsToCheck[i]).style.display = "block";
    } else {
      document.getElementById(divsToCheck[i]).style.display = "none";
    }

  }

}
<button role="button" onclick="showDiv('BraveDiv')">Brave</button>
<button role="button" onclick="showDiv('CompassionateDiv')">Compassionate</button>


<div id="BraveDiv" style="display: none;"> SOME BRAVE CONTENT HERE </div>
<div id="CompassionateDiv" style="display: none;"> SOME COMPASSIONATE CONTENT HERE </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...