Как мне управлять только однократным запуском события?
На самом деле, быстрый google, похоже, ссылается на то, что .one помогает...
Как мне управлять только однократным запуском события?
На самом деле, быстрый google, похоже, ссылается на то, что .one помогает...
Вы можете использовать метод jQuery one
, который будет подписаться только на первое появление события.
Например:
$('something').one('click', function(e) {
alert('You will only see this once.');
});
ваниль 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
То же, что и ответ rofrol, только другая форма:
function addEventListenerOnce(element, event, fn) {
var func = function () {
element.removeEventListener(event, func);
fn();
};
element.addEventListener(event, func);
}
Просто используйте правильную опцию в вызове метода addEventListener:
element.addEventListener(event, func, { once: true })
Кроме того, вы можете сделать это:
window.addEventListener("click", function handleClick(e) {
window.removeEventListener("click", handleClick);
// ...
});
Добавлены опции для добавления/удаления прослушивателя событий:
function addEventListenerOnce(target, type, listener, optionsOrUseCaptureForAdd, optionsOrUseCaptureForRemove) {
const f = event => {
target.removeEventListener(type, f, optionsOrUseCaptureForRemove);
listener(event);
}
target.addEventListener(type, f, optionsOrUseCaptureForAdd);
}