Skip to content

Aria Grabbed

DodaTech 2 min read

title: "aria-grabbed — Indicating Drag State to Screen Readers" description: "Learn how to use aria-grabbed to communicate whether an item is being dragged and its grab state to screen reader users." weight: 6 date: 2026-06-28 lastmod: 2026-06-28 tags: [accessibility, drag-drop]


aria-grabbed indicates whether an element is currently being dragged (true), is grabbable but not dragged (false), or if the grab state is undefined.

## What You'll Learn

How to use aria-grabbed to communicate drag state to assistive technologies.

## Why It Matters

Without aria-grabbed, screen reader users have no way to know if an item is currently being dragged or what the drag state is.

## Real-World Use

A user presses a "Grab" button on a list item. aria-grabbed changes to "true". The screen reader announces "Item grabbed." When dropped, aria-grabbed changes back to "false."

## aria-grabbed Implementation

```html
<li id="item1" role="listitem"
    aria-grabbed="false"
    aria-label="Task: Buy groceries. Not dragged.">
  <button aria-label="Grab task" onclick="grabItem(this)">Grab</button>
  <span>Buy groceries</span>
</li>
function grabItem(button) {
  const item = button.closest('[aria-grabbed]');
  const isGrabbed = item.getAttribute('aria-grabbed') === 'true';

  if (isGrabbed) {
    // Release
    item.setAttribute('aria-grabbed', 'false');
    item.setAttribute('aria-label', item.dataset.label + '. Not dragged.');
    announce('Item released');
  } else {
    // Grab
    item.setAttribute('aria-grabbed', 'true');
    item.setAttribute('aria-label', item.dataset.label + '. Currently being dragged.');
    announce('Item grabbed. Use move buttons to reposition.');
  }
}

State Announcement

<div id="drag-status" role="status" aria-live="polite" aria-atomic="true"></div>

Common Mistakes

1. aria-grabbed not updated dynamically

aria-grabbed must change from "false" to "true" when dragging starts and back when it ends.

2. Missing aria-grabbed on draggable items

Draggable items should have aria-grabbed set to indicate their state.

3. No label update with aria-grabbed

Update aria-label when grabbing so screen readers announce the state change.

4. aria-grabbed="undefined" used incorrectly

Use "undefined" only when the grab state is not known. Use "false" for grabbable but not grabbed.

5. No live region for drag announcements

Use a live region to announce grab, move, and drop events.

Practice Questions

1. What does aria-grabbed="true" indicate? The item is currently being dragged.

2. What does aria-grabbed="false" indicate? The item is grabbable but is not currently being dragged.

3. What should you do when an item is grabbed? Update aria-grabbed to "true", update aria-label, and announce the state via aria-live.

Challenge: Create a list of 5 draggable items. Use aria-grabbed to track and announce grab/release states.

FAQ

Is aria-grabbed supported by all screen readers?

Support is mixed. aria-grabbed is defined in WAI-ARIA but not reliably announced. Combine with aria-live and aria-label.

Should I use aria-grabbed or a custom attribute?

Use aria-grabbed for standards compliance, but also update aria-label and use aria-live for announcements.

Does aria-grabbed affect interaction?

No, aria-grabbed only communicates state. You must implement the actual drag behavior.

What is the default value of aria-grabbed?

There is no default. Always explicitly set aria-grabbed on draggable elements.

Can I use aria-grabbed on non-list items?

Yes, aria-grabbed can be used on any element that can be grabbed and moved.

Mini Project

Create a reorderable list with aria-grabbed state management. Include grab/release buttons and live region announcements.

What's Next

Learn about ARIA Drop Effect and how to communicate drop target behavior.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro