只开一次活动?

如何控制仅触发一次事件?

实际上,一个快速谷歌似乎暗示.one帮助..

您可以使用jQuery的one方法 ,该方法仅订阅第一次出现的事件。
例如:

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

如果您不需要支持Internet Explorer,请使用once

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

否则使用这个:

 function addEventListenerOnce(target, type, listener, addOptions, removeOptions) { target.addEventListener(type, function fn(event) { target.removeEventListener(type, fn, removeOptions); listener.apply(this, arguments); }, addOptions); } addEventListenerOnce(document.getElementById("myelement"), "click", function (event) { alert("You'll only see this once!"); }); 

与rofrol的答案相同,只是另一种forms:

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

只需在addEventListener方法调用中使用适当的选项:

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

rofrol的anwser略有改进版本:

 function addEventListenerOnce(target, type, listener) { target.addEventListener(type, function fn() { target.removeEventListener(type, fn); listener.apply(this, arguments); }); } 

通过使用apply传递所有参数,并且this可以按预期工作。

此外,您可以这样做:

 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); }