diff --git a/lib/helpers/scopeTab.js b/lib/helpers/scopeTab.js index 737352b6..5ba664fb 100644 --- a/lib/helpers/scopeTab.js +++ b/lib/helpers/scopeTab.js @@ -2,6 +2,7 @@ var findTabbable = require('../helpers/tabbable'); module.exports = function(node, event) { var tabbable = findTabbable(node); + if (!tabbable.length) return; var finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1]; var leavingFinalTabbable = ( finalTabbable === document.activeElement || diff --git a/specs/Modal.spec.js b/specs/Modal.spec.js index 514e7e43..6d8d4faf 100644 --- a/specs/Modal.spec.js +++ b/specs/Modal.spec.js @@ -92,6 +92,14 @@ describe('Modal', function () { }); }); + it('handles case when child has no tabbable elements', function() { + var component = renderModal({isOpen: true}, 'hello'); + assert.doesNotThrow(function() { + Simulate.keyDown(component.portal.refs.content, {key: "Tab", keyCode: 9, which: 9}) + }); + unmountModal(); + }); + it('supports custom className', function() { var modal = renderModal({isOpen: true, className: 'myClass'}); equal(modal.portal.refs.content.className.contains('myClass'), true);