Ok, well some progress. Learning exercise for me too.
Swapping out ‘click’ for ‘mouseup’ seems to have fixed the ie8 issue and also works in the newer browsers I have tested.
Edit: Just to explain the problem with ‘click’ in IE8. If you click repeatedly and too quickly then a dblclick event gets fired instead of click.
I’ve tried both the versions you gave above, and both of them still hide everything when JS is disabled. I’ve remembered to change the CSS, so I’m not sure where the problem is
Probably best I give you the complete code then. If I switch off javascript in chrome, it displays all the paragraphs. In addition testing in IE offline obviously blocks javascript until you ok it. All content is displayed until I click ‘ok’.
Here you go. Hope it works for you.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Type of Test</title>
<style>
body, h1, h2, h3, dl, dt, dd, ul, li, p {margin: 0; padding: 0;}
body {color: #333333;
font-family: "Trebuchet MS",Helvetica,sans-serif;
font-size: 100%;
line-height: 1.4;
background-color: #EDEDED;
}
#page {width: 100%;
max-width: 58em;
margin: auto;
background-color: #fff;
}
p {padding: 0.5em 0;}
.accordionItem h3 {
margin: 0;
font-size: 1.1em;
padding: 0.4em;
color: #fff;
background-color: #88F;
border-bottom: 1px solid #66d;
/* prevent h3 being highlighted */
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.accordionItem h3:hover { cursor: pointer; }
.accordionItem h3:focus { outline: 2px solid #0000FF; }
.accordionItem div {
margin: 0;
padding: 1em 0.4em;
background-color: #fff;
border-bottom: 1px solid #66d;
display: block;
}
.accordionItem div.show { display: block; }
.accordionItem div.hide { display: none; }
</style>
</head>
<body>
<div id="page">
<h2>Page Heading</h2>
<div class="accordionItem">
<h3 tabindex="0">First Question</h3>
<div>
<p>
Lorem ipsum dolor sit amet, consecteteur. Netus semper ve ante elit hymenaeos. Vitae dapibus, ultricies eu ullamcorper ut, cursus cum. Tortor vitae hendrerit rhoncus purus odio. Sapien. Vitae. Cras elit neque eros sem odio luctus fringilla nonummy. Taciti, luctus, urna sit. Dui sem consectetuer ut, lacus in erat, class.
</p>
</div>
</div>
<div class="accordionItem">
<h3 tabindex="0">Second Question</h3>
<div>
<p>
Lorem ipsum dolor sit. Varius praesent ullamcorper interdum, cras mi nulla dui maecenas habitasse ut, penatibus. Vehicula placerat libero nunc ut cras. Suspendisse laoreet morbi duis platea, sapien, bibendum pede. Hac eu elit fusce, urna rutrum, dictum orci. Felis penatibus sit, malesuada lacus ac luctus aliquam egestas odio. Cras. Ultrices aliquam posuere odio feugiat vivamus. Mollis, hendrerit adipiscing nibh. Hymenaeos. Eros senectus etiam diam facilisi vestibulum gravida cum ante nibh.
</p>
</div>
</div>
<div class="accordionItem">
<h3 tabindex="0">Third Question</h3>
<div>
<p>
Lorem ipsum dolor sit amet, consecteteur adipiscing elit elit. Porta at fames aenean. Sapien libero. Mauris hymenaeos ut, at ad risus nam platea.
</p>
</div>
</div>
<div class="accordionItem">
<h3 tabindex="0">Fourth Question</h3>
<div>
<p>
Lorem ipsum dolor sit amet, consecteteur adipiscing elit. Mauris euismod semper nisi urna lacinia eu, auctor at, interdum nec, natoque a, mattis fames magna turpis rutrum. Consectetuer cubilia vitae. Velit lectus consectetuer fermentum aenean neque adipiscing odio morbi tristique blandit. Sit. Purus. Semper pede, viverra laoreet diam ultrices nunc. Facilisis ante duis quisque in, convallis nisi. Potenti nibh lobortis odio, sit. Turpis. Mi. Libero, id lectus fringilla faucibus aenean. Cursus amet, arcu erat. Purus facilisis aliquet ante maecenas curabitur. Suspendisse arcu, odio, luctus aliquam. Nisi rhoncus et.
</p>
<p>
Pulvinar auctor curae condimentum pede. Nunc parturient curabitur morbi at consectetuer eget egestas. Sollicitudin integer, donec diam lorem, elementum dis. Duis odio. Porta potenti elit diam posuere convallis leo. Vel justo sociis diam gravida sit, vestibulum tortor, torquent aliquet fusce class. Elit non molestie. Et. Erat sollicitudin adipiscing cras. Sociis. Vel, eros. Ullamcorper. Diam, eu velit vitae duis feugiat.
</p>
</div>
</div>
<div class="accordionItem">
<h3 tabindex="0">Fifth Question</h3>
<div class='hide'>
<p>Lorem ipsum dolor sit amet, consecteteur adipiscing elit vehicula. A. Lacus proin ornare vulputate rhoncus. Ac nunc nunc natoque et, sem at lobortis fusce duis potenti eu, tempor. Pretium, donec neque felis, accumsan. Ante placerat augue. Tellus. Euismod dui, in fringilla eget.</p>
</div>
</div>
<div class="accordionItem">
<h3 tabindex="0" unselectable="on">Sixth Question</h3>
<div>
<p>
Lorem ipsum dolor sit amet, consecteteur adipiscing elit. Integer, iaculis ultricies habitant auctor lectus fusce posuere ut. Dolor netus, interdum dignissim. Tellus neque scelerisque eu lectus. Arcu semper id dictum massa parturient suspendisse tortor ut class neque morbi. Quis risus gravida metus amet arcu vivamus. Fringilla etiam nunc iaculis. Tempor. Consectetuer feugiat, augue nunc imperdiet. Odio. In, ac congue sit aenean, ad id curae lobortis felis id tristique. Consectetuer facilisis curae eu platea pharetra dui aliquam sagittis quisque taciti purus.
</p>
</div>
</div>
</div>
<script type="text/javascript">
(function() {
var addClass = function(el, clName) {
if ((' '+el.className+' ').indexOf(' '+clName+' ') === -1) { el.className = el.className+' '+clName; }
},
replaceClass = function(el, clName, newClName) {
var elClName = ' '+el.className+' ';
while (elClName.indexOf(' '+clName+' ') !== -1) { elClName = elClName.replace(' '+clName+' ',' '+newClName+' '); }
el.className = elClName.replace(/^\\s+|\\s+$/g, '');
},
addEvent = function(el, type, fn) {
if(el.addEventListener) {
el.addEventListener(type, fn, false);
return fn;
} else {
// bind 'this' to element
var callback = function(){ return fn.apply(el, arguments); }
el.attachEvent('on'+type, callback);
return callback;
}
},
items = document.querySelectorAll('.accordionItem'),
len = items.length, i;
toggleItem = function(e) {
var e = (e || window.event);
if(e.preventDefault) { e.preventDefault() }
else (e.returnValue = false);
var root = this,
div = root.querySelector('div'),
divToHide = document.querySelector('.accordionItem div.show');
replaceClass(div, 'hide', 'show');
if(divToHide) { replaceClass(divToHide, 'show', 'hide'); }
};
for (var i = 0; i < len; i += 1) {
addEvent(items[i], 'mouseup', toggleItem);
addEvent(items[i], 'keyup', toggleItem);
addClass(items[i].querySelector('div'), 'hide');
}
}());
</script>
</body>
</html>