leveraging aria attributes to create collapsible elements

I am working on an expandable div element that expands when a user clicks on it. I want to ensure it is accessible for screen readers. Below is the code snippet:

HTML

<div class="expandable" (click)="expandItem()" attr.aria-expanded="isCollapsed">
    Some content to show on expand
</div>

JS:

expandItem() {
  this.isCollapsed = true;
}

The variable isCollapsed is initially set to false.

Answer №1

As someone not well-versed in JavaScript, I haven't come across the syntax (click)="expandItem()" or attr.aria-expanded="isCollapsed" before. I am more familiar with onclick="expandeItem()" and aria-expanded="false". Despite this, I will set aside that aspect for now.

Initially, it is important to note that your <div> lacks semantic meaning, requiring various ARIA attributes to rectify this issue. However, before delving into this, it is prudent to consider the "First Rule of ARIA Use", which advises against unnecessary use of ARIA and encourages using native HTML elements whenever possible.

Without further context on your specific situation, I suggest contemplating substituting the <div> with an actual <button>, especially if you are dealing with a "disclosure widget".

If employing a real <button> is not feasible, then your <div> should include:

  • tabindex="0" (enabling keyboard focus)
  • a click handler (for mouse users)
  • a keyboard handler (to allow keyboard users to interact using space and enter)
  • a role="button" to convey the appropriate semantics for screen reader users
  • (Presuming your <div> includes a label)

Additionally, address the aria-expanded concern by toggling its value within the button's onclick event. Since this attribute represents a "state" rather than a "property", modifying its value will automatically be announced by screen readers.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

Alter the value of a parameter within a script tag with JavaScript/jQuery

Looking to dynamically change a parameter value using JavaScript or jQuery. Here is an example URL: www.exampleurl.com/somepage?foo=test I have a function that can extract the value after the 'foo' parameter: function getParameterByName(name, ...

AJAX using PHP returns an object containing null values

As a beginner in ajax programming, I encountered a small issue. I created a function in jQuery that makes an ajax call to a PHP file, which then retrieves information about a player from the database. However, when the PHP file responds to the ajax functio ...

What is the best way to assign a percentage width based on a variable in jQuery?

Is there a way to assign a dynamic width value to an element? Here is the code I am using: $(".menu_list_item").css({ width: width + "%" }); Unfortunately, this doesn't appear to be functioning correctly. If anyo ...

What is the best way to halt the parcel/babel/typescript process when encountering compilation errors or warnings?

index.jsx import React from 'react' import ReactDOM from 'react-dom' import Home from "./home"; const x:number = "aaa" const x:number = "aaa" const x:number = "aaa" ReactDOM.render(<Home/>, document.getElementById('root&ap ...

Enable users to provide ratings ranging from 0.5 up to 5

I recently created a rating component that allows users to rate on a scale from 0 to 4.5, with increments of 0.5, which is causing unexpected behavior. I actually want users to be able to rate from 0.5 to 5 instead. How can I achieve this adjustment? Below ...

What impact does utilizing CSS 3D Transforms have on search engine optimization (SEO)?

Google emphasizes the importance of not hiding content, as it may not be counted by search engines. However, Google Cache has shown some discrepancies in understanding certain elements correctly. It's possible that what Google perceives as hidden migh ...

Struggling with transferring information up the React component hierarchy to manipulate the Document Object Model

** I'm still learning React, so any assistance is greatly appreciated! ** A Little Background I have a modal (bootstrap4) hidden within the main app component, containing a form. The form is automatically filled with information from the selected re ...

Issues with the functionality of jQuery append and AngularJS ng-if not functioning

In my application using checkboxes, I control the visibility of charts with the ng-if directive and implement drag-and-drop functionality with angular-Dragula. The use of ng-if is essential for me as it allows me to manipulate visible div IDs and organize ...

Enclose an image with a <div> element while maintaining the <div> height at

Encountering a challenge where positioning an element on top of an image at specific coordinates (20% from the top and 30% from the left) is required. Initially, the solution involved wrapping the image in a div with a relative position and using absolute ...

CSS - Issue with aligning image captions

I created an HTML snippet that has the following structure: <div class="large-4 columns"> <div class="promo-box"> <a href="#"> <img src="/our-projec ...

Gathering user information through Javascript to dynamically populate an HTML document

Looking to utilize JavaScript to extract the value entered in a search bar and then display it in HTML. function pullValue() { var search = document.getElementById("search-bar") } How can the extracted data be inserted into the following: <h3 class ...

Integrate HTML parsing both inside and outside of an iframe using BeautifulSoup

My current project involves web scraping a real estate listing platform using Selenium, BS4, and Python. The script works by fetching the links to each listing page before proceeding to parse the HTML content of those pages. One key component is a Chrome E ...

Using mobile devices for multipart forms: managing actions that appear upon selecting a file input

My website features a multipart form where users are required to upload images. <form method="POST" encType="multipart/form-data" action="/uploads" id="forminho"> <div className="btn btn-success" id="submitFileBtn"> Select Image ...

Optimizing User Addition in Python Using Selenium

Currently, I am developing test cases to populate a new web app account with multiple users simultaneously. Here is the script I am using: driver.find_element_by_css_selector("input.ss-med.small").clear() driver.find_element_by_css_selector("input ...

Generate a list of files and transfer them to an input file

I am currently working on creating a drag and drop area where I can retrieve dataTransfer items using webkitGetAsEntry, and then differentiate between directories and files. My goal is to convert these files into a FileList and transfer them to a file inp ...

Using a for loop to add a nested div inside another div

Hey there, I've got a question about the loop that's currently in my code. Right now, I'm doing it manually and it seems to be working that way. $( '<div id="demo1" > <span class="value"></span> </div> ...

Having trouble using XMLHttpRequest to pass a JavaScript variable to PHP for querying MySQL. Any solutions?

I'm attempting to retrieve data from my MySQL database by using JavaScript in my HTML file. The specific Javascript code I have is as follows: <script> function getGameNumberOfPlays() { var sentValue1 = Number; var xhttp; xhttp = ne ...

Utilizing AggregateRating and ratingValue to represent ratings in the form of images

I'm facing a challenge while trying to incorporate rich snippets on my website, particularly in the AggregateRating section where the ratingValue is only displayed as an image. This is how my markup currently looks: <tr itemprop="reviews" itemsco ...

Block users from viewing the image displayed within a JavaScript canvas

On my server, I have a path to an image that is accessed by a JavaScript to load the image onto a canvas. The script then proceeds to hide certain parts of the image using black layers. The issue arises when a user can easily view my JavaScript code, extr ...

Donut visualization within a Sankey diagram using D3 JS

Looking to enhance my D3 Js Sankey diagram by adding a donut chart around the company circles. The donut chart will display two values, numsms and nummid, within the company node. Below is an example of what I am trying to achieve: However, I've been ...