71

what's the equivalent of jQuery's trigger method without jQuery?

e.g., how do i do something like $('.blah').trigger('click'); without jQuery?

xkeshav
  • 53,360
  • 44
  • 177
  • 245
john
  • 33,520
  • 12
  • 45
  • 62

5 Answers5

34

event.initMouseEvent("click"...

Here is an example:

function simulateClick(elId) {
    var evt;
    var el = document.getElementById(elId);
    if (document.createEvent) {
        evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    }
    (evt) ? el.dispatchEvent(evt) : (el.click && el.click());
}

var foo = document.getElementById("hey");

foo.onclick = function () {alert("bar");}

simulateClick("hey");
Adam
  • 12,236
  • 9
  • 39
  • 44
27

For some value of "a very shoddy equivalent":

var button = document.getElementById("thebutton")
button.click()

Not all browsers (e.g. Firefox!) allow simulated events this way! Using onclick() only works if the event is in-line, etc.

Please see the jQuery source and search for "trigger:" (first match) to see all the icky stuff done to "make it work" (a good bit of it is just munging around the jQuery internals, other frameworks make have much simpler examples).

Happy coding.

Daniel X Moore
  • 14,637
  • 17
  • 80
  • 92
  • 13
    This isn't the equivalent of jQuery's `.trigger()`. What about other events? e.g. `resize`, `scroll`, `hashchange`. What about custom events? This doesn't even work cross-browser. – Vince Feb 28 '16 at 21:52
  • 2
    This is supported as of Firefox 5 according to MDN. – wegry Jan 25 '17 at 14:22
  • 2
    Also it should noted that calling `click()` does not execute registered event listeners. – Code Spirit Dec 06 '18 at 13:07
15

in Javascript

var event = document.createEvent("Event");
event.initEvent("click", false, true); 
document.getElementById("blah").dispatchEvent(event);

is equivalent for jQuery trigger as below

$('#blah').trigger('click');
suatCoskun
  • 812
  • 2
  • 10
  • 14
  • `Event.initEvent()` is [deprecated](https://developer.mozilla.org/en-US/docs/Web/API/Event/initEvent) use instead [`Event()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/Event) – Madacol Jun 20 '23 at 10:01
5

Create an Event Object and pass it to element.dispatchEvent(event)

  const event = new MouseEvent('click', {
    view: window,
    bubbles: true,
    cancelable: true
  });

  element.dispatchEvent(event);

More info

Madacol
  • 3,611
  • 34
  • 33
3

Here is my example. Working perfectly in all situations

var d=document.createEvent("MouseEvents"),
    c=document.createEvent("MouseEvents"),
    p=document.createEvent("MouseEvents");
    d.initMouseEvent("mousedown",true,true,window,0,0,0,0,0,false,false,false,false,0,null);
    c.initMouseEvent("click"    ,true,true,window,0,0,0,0,0,false,false,false,false,0,null);
    p.initMouseEvent("mouseup"  ,true,true,window,0,0,0,0,0,false,false,false,false,0,null);

    var element =// some selector;

    element.dispatchEvent(d);
    element.dispatchEvent(c);
    element.dispatchEvent(p);
Mikolaytis
  • 921
  • 1
  • 12
  • 27