-1

Suppose I have the following 3 buttons:

<div role="button" class="ico-btn">
  Button A
</div>
<div role="button" class="ico-btn">
  Button B
</div>
<div role="button" class="ico-btn">
  Button C
</div>

Is there any way to trigger Button A by pressing the A key on the keyboard, or Button B by pressing the B key on the keyboard, etc.? Something like an attribute keypress="A" to make things more accessible?

double-beep
  • 5,031
  • 17
  • 33
  • 41
user1038814
  • 9,337
  • 18
  • 65
  • 86

2 Answers2

0

This can be done fairly easily with delegated event listeners:

// listen for keys
document.addEventListener('keyup', function(event){

    // all divs with the attribute data-listening_key
    var elems = document.querySelectorAll('div[data-listening_key]');
    elems.forEach(function(element, index){

        // if the one it's listening for matches this event
        var listening_key = element.dataset.listening_key;
        if(listening_key === event.key){
            var clickEvent = new Event('click'); // create and dispatch a click to it!
            element.dispatchEvent(clickEvent);
        }
    });
});
<div data-listening_key='x' onclick="console.log('Button A clicked')">
    Button A
</div>
<div data-listening_key='y' onclick="console.log('Button B clicked')">
    Button B
</div>
<div data-listening_key='z' onclick="console.log('Button C clicked')">
    Button C
</div>
Gavin
  • 2,214
  • 2
  • 18
  • 26
0

You can addEventListener to document and check keyCode. For A it is 65

document.getElementById('btnA').addEventListener('click', triggerA)

// function which will trigger on click of A
// So dirctly clicking A this function will trigger. 
// This is just for validation
function triggerA() {
  console.log('A')
}

document.body.addEventListener('keyup', function(e) {
  if (e.keyCode === 65) {
    // on press of A the div#btnA is getting clicked
    document.getElementById('btnA').click();
  }
})
.ico-btn {
  border: 1px solid yellow;
  border-radius: 2px;
  margin: 5px;
}
<div role="button" class="ico-btn" id='btnA'>
  Button A
</div>
<div role="button" class="ico-btn">
  Button B
</div>
<div role="button" class="ico-btn">
  Button C
</div>
brk
  • 48,835
  • 10
  • 56
  • 78