I'm sure this is incredibly simple but I'm pretty new to JS and I'd like to know the best way of doing this rather than hacking it out with a workaround.
So I have a div block and it's visibility is toggled when pressing a text field above it.
<h3 onclick="javascript: toggle1();">
  <span style="cursor:pointer">
    <b>Text1</b>
  </span>
</h3>
<div id="Text1" hidden="hidden">blahblah</div>
And then I have my JS:
function toggle1() {
  $('#Text1').toggle(1000);
}
This works fine, however when the user clicks the header text I also want to alter the height of a <hr> element above it
<hr id="line1" style="height:2px;border:none;color:#03930f;background-color:#03930f;" />
I have tried adding:
if($('#Text1').is(':visible')) {
  document.getElementById("line1").style.height = "15px";
}
else { 
  document.getElementById("line1").style.height = "2px"; 
}
but this doesn't work...I assume because the toggle() function doesn't toggle the same thing the is(':visible') condition is checking.
What is the correct way of doing this?
.toggle does affect the :visible status of an element, but having given it a duration (1000) its not immediate, which means if you want something to happen after it's finished it needs to be supplied in an optional callback:
$('#Text1').toggle(1000,function(){
    if($('#Text1').is(':visible')) {
        document.getElementById("line1").style.height = "15px";
    }
    else { document.getElementById("line1").style.height = "2px"; }
});
You're mixing jquery and vanilla javascript - while there is nothing wrong with that inherantly, it's a bit confusing. Stick to one or the other. Helpfully, inside a callback you can refer to the element using $(this), and as you already know elements can be targetted by id using #elementId
$('#Text1').toggle(1000,function(){
    if($(this).is(':visible')) {
         $('#line1').css('height','15px');
    }
    else { 
         $('#line1').css('height','2px');
    }
});
In line with the above, you shouldnt mix jquery and old-fashioned event handlers in html - again stick to jQuery if thats what you're writing
<h3><span style="cursor:pointer"><b>Text1</b></span></h3>
<div id="Text1" hidden="hidden">blahblah</div>
<hr id="line1" style="height:2px;border:none;color:#03930f;background-color:#03930f;" />
and
$('h3').on('click',function(){
    $('#Text1').toggle(1000,function(){
        if($(this).is(':visible')) {
             $('#line1').css('height','15px');
        }
        else { 
             $('#line1').css('height','2px');
        }
    });
});
Updated jsfiddle: http://jsfiddle.net/xLxsctfk/3/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With