0

I am trying to test in jasmine and need to trigger a keyup event with a specified keycode (enter in my case). When i try this

document.getElementById('title').addEventListener('keyup', function(e){
    console.log(e.keyCode);
});
var e = $.Event("keyup", {keyCode: 64});
$('title').trigger(e);

the event is not being triggered, although when I do manually set focus on it and press it is being triggered

but when i try this

$('title').on('keyup', function(e){
     e.currentTarget.style.color = 'red';
     console.log(e.keyCode);
});

var e = $.Event("keyup", {keyCode: 64});
$('title').trigger(e);

it is being triggered. I dont understand why one is not working and the other one is

rrk
  • 15,677
  • 4
  • 29
  • 45
Tenzin Choklang
  • 504
  • 1
  • 5
  • 21

2 Answers2

1

If you use addEventListener don't use trigger, use dispatchEvent :

document.getElementById("q").dispatchEvent(new KeyboardEvent('keyup', { 'keyCode': 65 }));
Daphoque
  • 4,421
  • 1
  • 20
  • 31
0

.trigger() only works when the event handler is attached using jquery. It doesn't work on native event listeners.

In the second case, you're attaching with $(..).on So jquery will trigger that event. Native Event Listener won't work here. You can use dispatchEvent

var event = new KeyboardEvent("keyup", {keyCode: 64});

document.getElementById('title').addEventListener('keyup', function(e){
    console.log(e.keyCode);
});

document.getElementById('title').dispatchEvent(event);

Check here for more info https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

SoWhat
  • 5,564
  • 2
  • 28
  • 59