17

I'm triggering some DOM Events with jQuery triggerHandler()

<!DOCTYPE html>
<html>
<head>
  <title>stackoverflow</title>
  <script src="http://ajax.googleapis.com:80/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>

<body>
  <script>
    $(document).ready(function() {
      $(document).on('hey', function(customEvent, originalEvent, data) {
        console.log(customEvent.type + ' ' + data.user); // hey stackoverflow

      });

      // how to this in vanilla js
      $(document).triggerHandler('hey', [{}, {
        'user': 'stackoverflow'
      }])
    });
  </script>
</body>

</html>

How can I trigger this without jQuery?

Important: I need to know the event type and the custom data

3
  • 1
    Under the covers jQuery will be using document.addEventListener('hey', function() { ... }); where hey is click, mousedown etc. Is that what you mean? Commented Apr 27, 2015 at 14:19
  • Reading the jQuery source would show you how it's done, since jQuery is JavaScript. Commented Apr 27, 2015 at 14:22
  • As far as i remember, jquery combines .dispatchEvent and .fireEvent for triggerHandler. You can easily write a function to try one or the other. dispatch event will work on most browsers. Commented Apr 27, 2015 at 14:35

2 Answers 2

16

If you want an exact replication of jQuery's behaviour, you're probably best off digging through the jQuery source code.

If you just want to do normal event dispatching and listening, see CustomEvent for how to dispatch an event with custom data and addEventListener for how to listen to it.

Your example would probably look something like

document.addEventListener('hey', function(customEvent)
{
    console.log(customEvent.type + ' ' + customEvent.detail.user); // hey stackoverflow
});
document.dispatchEvent(new CustomEvent('hey', {'detail': {'user': 'stackoverflow'}}));
Sign up to request clarification or add additional context in comments.

2 Comments

CustomEvent constructor has no support in IE.
@Johnston But it looks like there's a polyfill for it.
1

You can use Custom Events and dispatch them on element you want.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.