如何控制事件只触发一次?
实际上,快速搜索似乎暗示着 .one
有所帮助...
如果您不需要支持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!");
});
您可以使用 jQuery 的 one
方法,该方法将仅订阅事件的第一次出现。
例如:
$('something').one('click', function(e) {
alert('You will only see this once.');
});
e
是回调函数的事件形式参数。在这种情况下,它未被使用。这两个参数是事件类型和函数。 - Matthew Flaschenone
方法可以接受三个参数,请参阅文档。http://api.jquery.com/one/ - SLaksone
方法相当于先调用bind
,然后在处理程序中调用unbind
。 - SLaks只需在addEventListener方法调用中使用正确的选项:
element.addEventListener(event, func, { once: true })
function addEventListenerOnce(target, type, listener) {
target.addEventListener(type, function fn() {
target.removeEventListener(type, fn);
listener.apply(this, arguments);
});
}
this
的作用与预期相同。和rofrol的答案一样,只是另一种形式:
function addEventListenerOnce(element, event, fn) {
var func = function () {
element.removeEventListener(event, func);
fn();
};
element.addEventListener(event, func);
}
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);
}
this
并传递了所有参数。 - Shikyothis
。 - rofrol