Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>ally.maintain.hidden Example</title>
</head>
<body>
<article id="example-introduction">
  <h1><code>ally.maintain.tabFocus</code> Example</h1>
  <p>
    Use the <code>trap focus</code> button to engage <code>ally.maintain.disabled</code> and <code>ally.maintain.tabFocus</code> so that only the input elements <em>first</em>, <em>second</em> and <em>third</em> can be focused by pressing the <kbd>Tab</kbd> key.
    Press the <kbd>Escape</kbd> key to stop trapping focus.
    Note that the disabled elements are visualized with reduced opacity and a red border only for this demo.
  </p>
</article>
<div id="example-html">
  <main>
    <button id="toggle" type="button">trap focus</button>
    <hr>
    <input type="text" value="before">
    <div id="container">
      <input type="text" value="second" tabindex="0">
      <input type="text" value="not keyboard focusable" tabindex="-1">
      <input type="text" value="first" tabindex="1" id="start-focus">
      <input type="text" value="third" tabindex="0">
    </div>
    <input type="text" value="after">
  </main>
</div>
<script src="https://cdn.jsdelivr.net/ally.js/1.4.1/ally.min.js"></script>
</body>
</html>
 
:disabled,
[data-ally-disabled] {
  outline: 1px solid red;
  opacity: 0.5;
}
  
 
var handle;
var wrapper = document.getElementById('example-html');
var container = document.getElementById('container');
var toggle = document.getElementById('toggle');
toggle.addEventListener('click', function() {
  handle = ally.maintain.tabFocus({
    context: container,
  });
  ally.when.key({
    escape: function(event, disengage) {
      handle.disengage();
      handle = null;
      toggle.focus();
      disengage();
    },
  });
  document.getElementById('start-focus').focus();
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x