[英]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.