2010-08-03 99 views
15

如何控制只发射一次事件?只发一次事件?

事实上,一个快速谷歌似乎暗示这一事实。一是有助于..

+2

只要我的代表超过3000我要去c将'逃避'改为'暗示' – 2013-07-26 05:28:50

+0

哦,我的确是很尴尬。感谢那。 – Qcom 2013-07-26 17:25:53

+0

很高兴我的评论提请你注意 – 2013-07-26 19:10:54

回答

14

您可以使用jQuery的one method,这将认购仅一个事件的第一次出现。
例如:

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

好吧,真棒,只是想知道,括号之间的'e'是什么? 此外,此功能是否需要两个参数? 1为你想只运行一次,另一个为功能? – Qcom 2010-08-03 05:04:25

+1

'e'是回调的事件形式参数。在这种情况下,它是未使用的。这两个参数是事件类型和函数。 – 2010-08-03 05:05:52

+0

太棒了!这真的很有帮助,这和.bind有什么区别?难道它不需要被.unbind之类的东西解除绑定吗? – Qcom 2010-08-03 05:07:04

20

香草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/

编辑:修改从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); 
    } 
0

此外,你可以这样做:为附加

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

    // ... 
}); 
0

添加选项/删除事件侦听器:

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

只要使用正确的选项,你的addEventListener方法调用:

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

不支持IE。 – 2018-02-13 19:37:54