Accessibility in EJ2 TypeScript Dialog control
24 Jan 20249 minutes to read
The Dialog component followed the accessibility guidelines and standards, including ADA, Section 508, WCAG 2.2 standards, and WCAG roles that are commonly used to evaluate accessibility.
The accessibility compliance for the Dialog component is outlined below.
WAI-ARIA attributes
The Dialog characterized with complete ARIA Accessibility support which helps to accessible by on-screen readers and other assistive technology devices. This component designed with the reference of the guidelines document given in WAI ARAI Accessibility Practices.
The Dialog component uses the Dialog
role and following ARIA properties to its element based on its state.
Property | Functionalities |
---|---|
aria-describedby | It indicates the Dialog content description is notified to the user through assistive technologies. |
aria-labelledby | The Dialog title is notified to the user through assistive technologies. |
aria-modal | For modal dialog it’s value is true and non-modal dialog its value is false |
aria-grabbed | Enable the draggable Dialog and starts dragging it is value is true and stopping the drag its value is false |
Keyboard interaction
Keyboard interaction of Dialog component has designed based on WAI-ARIA Practices described for Dialog. User can use the following shortcut keys to interact with the Dialog.
Keyboard shortcuts | Actions |
Esc | Closes the Dialog. This functionality can be controlled by using `closeOnEscape` |
Enter | When the Dialog button or any input (except text area) is in focus state, when pressing the Enter key, the click event associated with the primary button or button will trigger. Enter key is not working when the Dialog content contains any text area with initial focus |
Ctrl + Enter | When the Dialog content contains text area and it is in focus state, and press the Ctrl + Enter key to call the click event function associated with primary button |
Tab | Focus will be changed within the Dialog elements |
Shift + Tab | The Focus will be changed previous focusable element within the Dialog elements. When focusing a first focusable element in the Dialog, then press the shift + tab key, it will change the focus to last focusable element |
import { Dialog } from '@syncfusion/ej2-popups';
import { enableRipple } from '@syncfusion/ej2-base';
enableRipple(true);
// Initialize Dialog component
let dialog: Dialog = new Dialog({
// Enables the header
header: 'Feedback',
// Dialog content
content: document.getElementById("dlgContent"),
// Enables the close icon in header
showCloseIcon: true,
// Enables the footer buttons
buttons: [{
// Accessing button component properties by buttonModel property
buttonModel: {
//Enables the primary button
isPrimary: true,
content: 'Submit',
cssClass: 'e-flat',
},
// Click the footer buttons to hide the Dialog
click: function () {
this.hide();
}
}],
// The Dialog shows within the target element
target: document.getElementById("container"),
// Dialog width
width: '400px',
// Dialog height
height: '330px',
beforeOpen: onBeforeopen
});
// Render initialized Dialog
dialog.appendTo('#dialog');
// Sample level code to handle the button click action
document.getElementById('targetButton').onclick = (): void => {
// Call the show method to open the Dialog
dialog.show();
};
function onBeforeopen(): void {
document.getElementById('dlgContent').style.visibility = 'visible';
}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Essential JS 2 Dialog</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="TypeScript UI Components" />
<meta name="author" content="Syncfusion" />
<link href="styles.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/27.2.2/ej2-base/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/27.2.2/ej2-buttons/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/27.2.2/ej2-inputs/styles/material.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/27.2.2/ej2-popups/styles/material.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id='loader'>LOADING....</div>
<div id='container'>
<button class="e-control e-btn" id="targetButton" role="button" e-ripple="true" style="position: absolute;" >Open Dialog</button>
<div id='dialog'></div>
<form id='dlgContent' style="visibility: hidden">
<div class='form-group'><label for='email'>Email:</label>
<input type='email' class='form-control' id='email'>
</div>
<div class='form-group'>
<label for='comment'>Comments:</label>
<textarea style='resize: none;' class='form-control' rows='4' id='comment'></textarea>
</div>
</form>
</div>
</body>
</html>
See Also
Ensuring accessibility
The Dialog component’s accessibility levels are ensured through an accessibility-checker and axe-core software tools during automated testing.
The accessibility compliance of the Dialog component is shown in the following sample. Open the sample in a new window to evaluate the accessibility of the Dialog component with accessibility tools.