只触发一次事件?

IT技术 javascript jquery dom-events
2021-02-18 01:28:56

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

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

6个回答

使用once,如果你不需要支持Internet Explorer:

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!");
});
@Shikyo 我已经添加了 this
2021-05-05 01:28:56
美丽的方法,我从来没有想过用这样的命名函数。见我的回答一个稍微改进版保存this和传递所有的参数。
2021-05-10 01:28:56

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

$('something').one('click', function(e) {
    alert('You will only see this once.');
});
如文档中所述,调用该one方法等效于调用bind,然后unbind在处理程序中调用
2021-04-22 01:28:56
惊人的!这是真正有用的,就是这一点,并.bind之间的区别?是不是不需要像 .unbind 这样的东西解除绑定?
2021-04-26 01:28:56
好的,太棒了,只是想知道,括号之间的“e”是什么?另外,这个函数需要两个参数吗?1你想只运行一次的东西,其他的功能?
2021-04-29 01:28:56
e是回调的事件形式参数。在这种情况下使用。这两个参数是事件类型和函数。
2021-05-05 01:28:56
one方法可以带三个参数;请参阅文档。 api.jquery.com/one
2021-05-14 01:28:56

同rofrol的回答,只是另一种形式:

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

rofrol 的 anwser 的稍微改进版本:

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

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

你不应该再使用那个黑客了,有一个简单的方法来做那个 element.addEventListener(event, func, { once: true }),正如@kapitalny 指出的
2021-04-17 01:28:56
它确实更好,但 IE 是一个...... caniuse.com/#search=once
2021-04-30 01:28:56

只需在 addEventListener 方法调用中使用正确的选项:

element.addEventListener(event, func, { once: true })
IE 不支持。
2021-04-23 01:28:56