Button does not function on the first click
What I think is happening is that your click handler is being called on the first click, but your if
test isn't working the way you expect. This line:
if(node_list[i].style.display == 'none')
...is testing whether the element has an inline style set. Which it doesn't: it's hidden via a CSS rule that applies to all such inputs. So then your else
case executes and the .display
is set to 'none'
. Then on the next click, the if
works as expected and changes .display
to 'block'
.
You can see this for yourself if you actually debug your function a little to see if it is getting called and test the value of that .display
property - as you can see here: http://jsfiddle.net/uLjxp3ha/ (note: I don't recommend alert()
s for debugging).
Checking the current visibility as set by stylesheet rules is a bit trickier because it doesn't work consistently across browsers. You may need to test for existence of .currentStyle
and .getComputedStyle()
to allow for whichever one the current browser might support. Have a look at this answer to another question for more information about that.
But in your case given that you know the checkboxes are hidden to begin with you can simply invert your if/else:
if(node_list[i].style.display == 'block') {
node_list[i].style.display = 'none';
} else {
node_list[i].style.display = 'block';
}
The .display
will not be 'block'
to start with, so the else will be executed and the elements will be displayed.
Demo: http://jsfiddle.net/uLjxp3ha/1/