Ответ 1
Вы можете использовать метод jQuery one
, который будет подписаться только на первое появление события.
Например:
$('something').one('click', function(e) {
alert('You will only see this once.');
});
Как мне управлять только однократным запуском события?
На самом деле, быстрый 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);
}