1

I have the following problem: I have to click on the button twice to make the script work, and I don't know why. I've tried to read some posts with the search but none of them have resolved my question.

Thanks for the help.

#div1{width: 400px; background-color: beige; transition: 1s}
.div2{background-color: aquamarine}
.div2 button{float: right; width: 50px;cursor: pointer; outline: none}
.div2 p{height: 0px;overflow: hidden;transition: 1s}
.div3 img{padding: 5%}
<div id="div1">
<div class="div2">
 <h3>prova 1<button id="buttonst" onClick="showtext()">+</button></h3>
 <p id="ptext">lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, </p>
 <script>
 function showtext(){
 var but = document.getElementById("buttonst");
 var p = document.getElementById("ptext");
 var div = document.getElementById("div1");
  if (p.style.height === "0px"){
   but.innerHTML = "v";
   p.style.height = "200px";
   div.style.backgroundColor = "aquamarine";
  } else {
   but.innerHTML = "+";
   p.style.height = "0px";
   div.style.backgroundColor = "beige";
  }
 }
 </script>
 </div>
 <div class="div3">
 <img src="imagefile" alt="" width="90%">
 </div>
</div>
Juan
  • 198
  • 1
  • 14
Mattia
  • 21
  • 5

2 Answers2

1

On first time it goes inside the else block of your function.I solved adding style="height:0" on the

tag.

<div id="div1">
<div class="div2">
<h3>prova 1<button id="buttonst" onClick="showtext()">+</button></h3>
<p id="ptext" style="height:0">lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, 
lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, lorem ipsum, </p>
<script>
function showtext(){

var but = document.getElementById("buttonst");
var p = document.getElementById("ptext");
var div = document.getElementById("div1");
    if (p.style.height === "0px"){

        but.innerHTML = "v";
        p.style.height = "200px";
        div.style.backgroundColor = "aquamarine";
    } else {

        but.innerHTML = "+";
        p.style.height = "0px";
        div.style.backgroundColor = "beige";
    }
}
</script>
</div>
<div class="div3">
<img src="imagefile" alt="" width="90%">
</div>
</div>
Kurohige
  • 1,378
  • 2
  • 16
  • 24
0

Your code checks the style property for the ptext element which refers only to inline styling. Since the height is applied by a CSS class and not as inline styling.

As suggested by Kurohige you can add the height as inline styling from the get-go, or if you prefer to use CSS as you currently are, a possible solution is posed in this question.

Juan
  • 198
  • 1
  • 14