Skip to content

Instantly share code, notes, and snippets.

@marlun78
Last active December 23, 2016 07:58
Show Gist options
  • Save marlun78/990401f258c11caada68 to your computer and use it in GitHub Desktop.
Save marlun78/990401f258c11caada68 to your computer and use it in GitHub Desktop.
Register a one-time event listener. A little bit like jQuery’s `one`.
/**
* Once
* Copyright (c) 2014 marlun78
* MIT License, https://gist.github.com/marlun78/bd0800cf5e8053ba9f83
*/
/**
* Register a one-time event listener. Something similar to jQuery’s `one`.
*
* NOTE! It doesn’t handle `target.removeEventListener(type, originalListener, useCapture)`.
* Provides a `deregister` function instead.
*
* @param {EventTarget} target
* @param {String} type
* @param {Function} listener
* @param {Boolean} [useCapture]
* @returns {Function} deregister
*/
function once(target, type, listener, useCapture) {
var capture = !!useCapture;
target.addEventListener(type, handler, capture);
function deregister() {
target.removeEventListener(type, handler, capture);
}
function handler() {
deregister();
return listener.apply(this, arguments);
}
return deregister;
}
/**
* Optional (and contraversal)
*/
EventTarget.prototype.addOneTimeEventListener = function addOneTimeEventListener(type, listener, useCapture) {
once(this, type, listener, useCapture);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment