Skip to content
View in the app

A better way to browse. Learn more.

Web Designer Forum

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Stuck on Aria Roles JS

Featured Replies

Morning Gang.

 

I'm a little stumped with how to implement aria roles on a progressive responsive navigation. I've made some progress though i'm a little stuck as to where to go next.

 

I thought to add the <button> via js would mean no js = the nav wouldn't collapse, just reshape, then if js enabled insert the button and use the js to expand, collapse or restore to wide state, but the js button will hide above 960 but I think I need to toggle via the toggleNav() function.

 

I'm not sure now quite what to do about aria-expanded, aria-hidden, etc. Anyone got a good link to a guide or knows? I did some searching and came up with many different ways and wasn't sure which to believe or implement.

 

The HTML...

<div class="nav_bar shadow" id="nav_bar">
<div id="menu">Menu</div>
<nav role="navigation" id="nav"><ul class="title">
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 1</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 2</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 3</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 4</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 5</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 6</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 7</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 8</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Menu 9</span></a></li>
<li itemscope itemtype="http://schema.org/SiteNavigationElement"><a href="#" itemprop="url"><span itemprop="name">Home</span></a></li>
</ul></nav>
</div>

The CSS...

#menu {display:none;}
@media only screen and (max-width : 960px) {
#menu{display:block;}
}

The JS...

function toggleNav() { if($('#menu').css('display') == 'none' ){ $('#nav').show(); $('#nav_bar').removeClass('nav_bar_closed'); } else { if($('#menu_button').hasClass('menu_on')){ $('#nav').show(); $('#nav_bar').removeClass('nav_bar_closed'); } else { $('#nav').hide(); $('#nav_bar').addClass('nav_bar_closed'); } } }
$(window).resize(toggleNav);
$(window).load(toggleNav);
$(document).ready(function(){
$('#menu').html('<button id="menu_button" class="title" aria-controls="nav">Menu<i class="fa fa-chevron-circle-down fa-fw fa-lg" aria-hidden="true"></i></button>');
$('#menu_button').click(function() {
if($('#nav').is(":visible")) {
$('#nav').slideUp(function(){ $('#nav_bar').addClass('nav_bar_closed'); });
$('#menu_button').removeClass('menu_on');
$('#menu_button i').removeClass('fa-chevron-circle-up').addClass('fa-chevron-circle-down');
} else {
$('#menu_button').addClass('menu_on');
$('#menu_button i').removeClass('fa-chevron-circle-down').addClass('fa-chevron-circle-up');
$('#nav_bar').removeClass('nav_bar_closed');
$('#nav').slideDown();
}
});
});

Cheers!

 

Edit: Think i've made some progress but anyone with experience can you tell me if i'm on the mark?

 

The JS...

function toggleNav() { 
	if($('#menu').css('display') == 'none' ){ 
		$('#nav').attr('aria-hidden', 'false').show();
		$('#nav_bar').removeClass('nav_bar_closed');
		$('#menu_button').attr('aria-expanded', 'true').attr('aria-hidden', 'true');
	} else { 
		$('#menu_button').attr('aria-hidden', 'false');
		if($('#menu_button').hasClass('menu_on')){
			$('#nav').attr('aria-hidden', 'false').show(); $('#nav_bar').removeClass('nav_bar_closed');
			$('#menu_button').attr('aria-expanded', 'true');
		} else { 
			$('#nav').attr('aria-hidden', 'true').hide(); $('#nav_bar').addClass('nav_bar_closed');
			$('#menu_button').attr('aria-expanded', 'false');
		}
	}
}
$(window).resize(toggleNav);
$(window).load(toggleNav);
$(document).ready(function(){
	$('#menu').html('<button id="menu_button" class="title" aria-expanded="true" aria-controls="nav">Menu<i class="fa fa-chevron-circle-down fa-fw fa-lg" aria-hidden="true"></i></button>');
	$('#menu_button').click(function() {
		if($('#nav').is(":visible")) {
			$('#nav').attr('aria-hidden', 'true').slideUp(function(){ $('#nav_bar').addClass('nav_bar_closed'); });
			$('#menu_button').attr('aria-expanded', 'false').removeClass('menu_on');
			$('#menu_button i').removeClass('fa-chevron-circle-up').addClass('fa-chevron-circle-down');
			$('#menu_button').focus();
		} else {
			$('#menu_button').attr('aria-expanded', 'true').addClass('menu_on');
			$('#menu_button i').removeClass('fa-chevron-circle-down').addClass('fa-chevron-circle-up');
			$('#nav_bar').removeClass('nav_bar_closed');
			$('#nav').attr('aria-hidden', 'false').slideDown().focus();
		}
	});
});

Edited by BrowserBugs

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.