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,214
  • 4
  • 26
  • 42
Tenzin Choklang
  • 434
  • 1
  • 4
  • 20

2 Answers2

1

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

document.getElementById("q").dispatchEvent(new KeyboardEvent('keyup', { 'keyCode': 65 }));
Daphoque
  • 4,120
  • 1
  • 18
  • 28
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,338
  • 2
  • 27
  • 57