Bird
Raised Fist0
Bootsrapmarkup~10 mins

Focus management in modals in Bootsrap - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to add the Bootstrap modal class to the modal container.

Bootsrap
<div class="modal [1]" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <!-- Modal content here -->
    </div>
  </div>
</div>
Drag options to blanks, or click blank then click option'
Ahidden
Bshow
Cfade
Dactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'show' class initially instead of 'fade'.
Forgetting to add any class for modal animation.
2fill in blank
medium

Complete the code to set the modal's initial focus to the close button when it opens.

Bootsrap
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" [1]></button>
Drag options to blanks, or click blank then click option'
Aautofocus
Bdisabled
Caria-hidden="true"
Dtabindex="-1"
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'tabindex="-1"' which removes the element from tab order.
Setting 'disabled' which prevents interaction.
3fill in blank
hard

Fix the error in the JavaScript code that traps focus inside the modal.

Bootsrap
const modal = document.getElementById('myModal');
modal.addEventListener('keydown', (event) => {
  if (event.key === 'Tab') {
    const focusableElements = modal.querySelectorAll('a, button, input, textarea, select, [tabindex]:not([tabindex="-1"])');
    const firstElement = focusableElements[0];
    const lastElement = focusableElements[focusableElements.length - 1];

    if (event.shiftKey) {
      if (document.activeElement === firstElement) {
        event.preventDefault();
        [1].focus();
      }
    } else {
      if (document.activeElement === lastElement) {
        event.preventDefault();
        firstElement.focus();
      }
    }
  }
});
Drag options to blanks, or click blank then click option'
AlastElement
BfirstElement
Cmodal
Ddocument.activeElement
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'firstElement' instead of 'lastElement' for backward tabbing.
Trying to focus the modal container instead of a focusable element.
4fill in blank
hard

Fill both blanks to create an object using reduce that maps each input's id to its value only if the input is focused.

Bootsrap
const inputs = Array.from(document.querySelectorAll('input'));
const focusedInputs = inputs.reduce((acc, input) => {
  if (document.activeElement === input) {
    acc[[1]] = [2].value;
  }
  return acc;
}, {});
Drag options to blanks, or click blank then click option'
Ainput.id
Binput
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping keys and values.
Using input.value as key which is incorrect.
5fill in blank
hard

Fill all three blanks to create a function that opens a modal, sets focus to the first focusable element, and traps focus inside.

Bootsrap
function openModal(modalId) {
  const modal = document.getElementById([1]);
  modal.classList.add([2]);
  const focusableElements = modal.querySelectorAll('a, button, input, textarea, select, [tabindex]:not([tabindex="-1"])');
  const firstElement = focusableElements[0];
  firstElement.[3]();

  modal.addEventListener('keydown', (event) => {
    if (event.key === 'Tab') {
      const lastElement = focusableElements[focusableElements.length - 1];
      if (event.shiftKey) {
        if (document.activeElement === firstElement) {
          event.preventDefault();
          lastElement.focus();
        }
      } else {
        if (document.activeElement === lastElement) {
          event.preventDefault();
          firstElement.focus();
        }
      }
    }
  });
}
Drag options to blanks, or click blank then click option'
A"myModal"
Bfocus
C"show"
Dblur
Attempts:
3 left
💡 Hint
Common Mistakes
Forgetting quotes around the modal id.
Adding wrong class like 'fade' instead of 'show'.
Calling 'blur()' instead of 'focus()' on the element.

Practice

(1/5)
1. What is the main purpose of focus management in Bootstrap modals?
easy
A. To keep keyboard users inside the modal until it closes
B. To change the modal background color automatically
C. To resize the modal based on screen size
D. To disable mouse clicks outside the modal

Solution

  1. Step 1: Understand focus management concept

    Focus management ensures keyboard users cannot tab outside the modal while it is open.
  2. Step 2: Identify purpose in Bootstrap modals

    Bootstrap modals trap focus inside to improve accessibility for keyboard and screen reader users.
  3. Final Answer:

    To keep keyboard users inside the modal until it closes -> Option A
  4. Quick Check:

    Focus management = trap keyboard focus inside modal [OK]
Hint: Focus management traps keyboard inside modal [OK]
Common Mistakes:
  • Thinking it changes modal style
  • Confusing focus with mouse clicks
  • Assuming it resizes modal automatically
2. Which attribute does Bootstrap automatically add to modals to help screen readers identify them?
easy
A. aria-hidden='true'
B. aria-modal='true'
C. aria-expanded='false'
D. aria-live='polite'

Solution

  1. Step 1: Recall ARIA roles for modals

    Modals should have aria-modal='true' to indicate a modal dialog to screen readers.
  2. Step 2: Identify Bootstrap's automatic ARIA attribute

    Bootstrap adds aria-modal='true' to trap focus and signal modal behavior.
  3. Final Answer:

    aria-modal='true' -> Option B
  4. Quick Check:

    Bootstrap modals use aria-modal='true' for accessibility [OK]
Hint: Look for aria-modal='true' in modal HTML [OK]
Common Mistakes:
  • Confusing aria-hidden with aria-modal
  • Using aria-expanded which is for collapsibles
  • Thinking aria-live controls modal focus
3. Consider this HTML snippet using Bootstrap modal:
<button id='openModal'>Open</button>
<div class='modal' tabindex='-1' role='dialog' aria-modal='true'>
  <div class='modal-dialog'>
    <div class='modal-content'>
      <button id='closeModal'>Close</button>
    </div>
  </div>
</div>

What happens when the modal is open and the user presses the Tab key repeatedly?
medium
A. Focus moves to elements outside the modal as well
B. Focus moves to the browser address bar
C. Focus gets stuck on the first button inside the modal
D. Focus cycles only between elements inside the modal

Solution

  1. Step 1: Understand Bootstrap modal focus trap

    Bootstrap traps keyboard focus inside the modal when open, cycling through modal elements only.
  2. Step 2: Analyze Tab key behavior

    Pressing Tab moves focus forward inside modal elements, looping back to first element after last.
  3. Final Answer:

    Focus cycles only between elements inside the modal -> Option D
  4. Quick Check:

    Tab key cycles focus inside modal [OK]
Hint: Tab cycles focus inside modal elements only [OK]
Common Mistakes:
  • Thinking focus escapes modal on Tab
  • Assuming focus gets stuck on one element
  • Believing focus moves outside modal to browser
4. You notice that after opening a Bootstrap modal, keyboard focus is not trapped inside it and users can tab to background page elements. What is the likely cause?
medium
A. The modal is missing the tabindex='-1' attribute
B. The modal has aria-modal='false' set
C. The modal content is missing a close button
D. The modal is missing the data-bs-backdrop attribute

Solution

  1. Step 1: Check tabindex attribute role in focus trapping

    Bootstrap requires tabindex='-1' on the modal container to manage focus properly.
  2. Step 2: Identify cause of focus escape

    Without tabindex='-1', focus trapping fails and keyboard can move outside modal.
  3. Final Answer:

    The modal is missing the tabindex='-1' attribute -> Option A
  4. Quick Check:

    Missing tabindex='-1' breaks focus trap [OK]
Hint: Ensure tabindex='-1' on modal container for focus trap [OK]
Common Mistakes:
  • Thinking aria-modal='false' causes focus issues
  • Assuming close button affects focus trap
  • Confusing backdrop attribute with focus behavior
5. You want to customize a Bootstrap modal so that when it closes, focus returns to the button that opened it. Which approach correctly manages focus for accessibility?
hard
A. Use tabindex='0' on the modal container to trap focus
B. Set autofocus attribute on the modal's close button
C. Add a JavaScript event listener on modal close to focus the opener button
D. Disable Bootstrap's focus trap and manage focus manually

Solution

  1. Step 1: Understand default Bootstrap focus behavior

    Bootstrap traps focus inside modal but does not automatically return focus to opener on close.
  2. Step 2: Implement custom focus return

    Use JavaScript event listener on modal's 'hidden.bs.modal' event to set focus back to the button that opened it.
  3. Final Answer:

    Add a JavaScript event listener on modal close to focus the opener button -> Option C
  4. Quick Check:

    Return focus to opener with JS event listener [OK]
Hint: Use JS event to focus opener button on modal close [OK]
Common Mistakes:
  • Relying on autofocus attribute inside modal
  • Using tabindex='0' on modal container incorrectly
  • Disabling Bootstrap focus trap unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard