Разблокировать только событие?

Как мне управлять только однократным запуском события?

На самом деле, быстрый google, похоже, ссылается на то, что .one помогает...

Ответы

Ответ 1

Вы можете использовать метод jQuery one, который будет подписаться только на первое появление события.
Например:

$('something').one('click', function(e) {
    alert('You will only see this once.');
});

Ответ 2

ваниль js

function addEventListenerOnce(target, type, listener) {
    target.addEventListener(type, function fn(event) {
        target.removeEventListener(type, fn);
        listener(event);
    });
}

addEventListenerOnce(document.getElementById("myelement"), "click", function (event) {
    alert("You'll only see this once!");
});

http://www.sitepoint.com/create-one-time-events-javascript/

Изменить: модификация, вдохновленная версией ling и терминологией https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

Изменить 2016-11-23:

once подходит к браузерам. В настоящее время в Chrome 55, Firefox 50, Safari 10.1

И вы используете его следующим образом:

document.addEventListener(
  'DOMContentLoaded',
  improveAllTheThings,
  {once: true}
);

https://www.webreflection.co.uk/blog/2016/04/17/new-dom4-standards

Ответ 3

То же, что и ответ rofrol, только другая форма:

    function addEventListenerOnce(element, event, fn) {
        var func = function () {
            element.removeEventListener(event, func);
            fn();
        };
        element.addEventListener(event, func);
    }

Ответ 4

Просто используйте правильную опцию в вызове метода addEventListener:

element.addEventListener(event, func, { once: true })

Ответ 5

Кроме того, вы можете сделать это:

window.addEventListener("click", function handleClick(e) {
    window.removeEventListener("click", handleClick);

    // ...
});

Ответ 6

Добавлены опции для добавления/удаления прослушивателя событий:

function addEventListenerOnce(target, type, listener, optionsOrUseCaptureForAdd, optionsOrUseCaptureForRemove) {
    const f = event => {
        target.removeEventListener(type, f, optionsOrUseCaptureForRemove);
        listener(event);
    }
    target.addEventListener(type, f, optionsOrUseCaptureForAdd);
}