简体   繁体   English

一个元素,多个事件

[英]One element, multiple events

In jQuery you can easily do it like this: 在jQuery中,您可以轻松地做到这一点:

$("#foo").focus(function () {
    // Do this.
}).blur(function () {
    // Do that.
});

Can we do something similar in pure JavaScript so we don't have to repeat #foo in two separate functions? 我们可以在纯JavaScript中做类似的事情,这样就不必在两个单独的函数中重复#foo吗?

Use a variable; 使用变量; really! 真!

var foo = document.getElementById('foo');

foo.addEventListener('focus', function () {
    // Do this.
});

foo.addEventListener('blur', function () {
    // Do that.
});

Or a helper, if you prefer: 或帮助者,如果您愿意:

function on(eventSource, listeners) {
    for (var k in listeners) {
        if (Object.prototype.hasOwnProperty.call(listeners, k)) {
            eventSource.addEventListener(k, listeners[k]);
        }
    }
}

on(foo, {
    focus: function () {
        // Do this.
    },
    blur: function () {
        // Do that.
    }
});

Or a chaining helper: 或链接助手:

function chainOnly(obj) {
    var wrapper = {};

    function createChainWrapper(func) {
        return function wrapped() {
            func.apply(obj, arguments);
            return wrapper;
        };
    }

    for (var k in obj) {
        if (typeof obj[k] === 'function') {
            wrapper[k] = createChainWrapper(obj[k]);
        }
    }

    return wrapper;
}

chainOnly(foo)
    .addEventListener('focus', function () { /* … */ })
    .addEventListener('blur',  function () { /* … */ });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM