在 YUI3 中是否可以将单个处理程序附加到多个事件?

发布于 2024-09-18 10:14:52 字数 219 浏览 9 评论 0原文

那么这样的事情可能吗?

Y.one("input.units").on("keyup change", function(e){
    ...
});

jquery 等价的是

$("input.units").bind("keyup change", function(e){
    ...
});

so is something like this possible?

Y.one("input.units").on("keyup change", function(e){
    ...
});

the jquery equivalent is

$("input.units").bind("keyup change", function(e){
    ...
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

深居我梦 2024-09-25 10:14:52

是的,这是可能的。只需传递事件名称数组而不是字符串:

Y.one('input.units').on(['keyup', 'change'], function (e) {
    // ...
});

Yes, this is possible. Just pass an array of event names instead of a string:

Y.one('input.units').on(['keyup', 'change'], function (e) {
    // ...
});
丿*梦醉红颜 2024-09-25 10:14:52

为什么不尝试这样的事情:

var actionFunction = function(e) { /* stuff goes here */ };

node.one("input.units").on("keyup", actionFunction);
node.one("input.units").on("change", actionFunction);

Why not try something like this:

var actionFunction = function(e) { /* stuff goes here */ };

node.one("input.units").on("keyup", actionFunction);
node.one("input.units").on("change", actionFunction);
ゃ人海孤独症 2024-09-25 10:14:52

编辑: YUI 本身支持此功能。请参阅下面 Ryan 的回答。

。不过,您可以这样做:

YUI().use("node", "oop", function (Y) {
var on = Y.Node.prototype.on;

function detachOne(handle) {
    handle.detach();
}

Y.mix(Y.Node.prototype, {
        on: function (type, fn, context) {
            var args = Y.Array(arguments),
                types = args[0].split(" "),
                handles = [];

            Y.each(types, function (type) {
                    args[0] = type;
                    handles.push(on.apply(this, args));
                })

            return {
                detach: Y.bind(Y.each, null, handles, detachOne)
            };
        }
    }, true);
})

此代码包装 Node.on() 以接受空格分隔的事件类型字符串。它返回一个带有单个方法 detach 的对象,该方法将您的处理程序与所有事件分离。

请注意,此代码仅影响其沙箱内的 Y 实例,因此您应该将其放在传递给 YUI().use 的函数内。将其打包为模块也很容易。

EDIT: YUI supports this natively. See Ryan's answer below.

No. You could do something like this, though:

YUI().use("node", "oop", function (Y) {
var on = Y.Node.prototype.on;

function detachOne(handle) {
    handle.detach();
}

Y.mix(Y.Node.prototype, {
        on: function (type, fn, context) {
            var args = Y.Array(arguments),
                types = args[0].split(" "),
                handles = [];

            Y.each(types, function (type) {
                    args[0] = type;
                    handles.push(on.apply(this, args));
                })

            return {
                detach: Y.bind(Y.each, null, handles, detachOne)
            };
        }
    }, true);
})

This code wraps Node.on() to accept a string of space-delimited event types. It returns an object with a single method, detach, which detaches your handler from all of the events.

Note that this code only affects the Y instance inside its sandbox, so you should put it inside the function that you pass to YUI().use. It would also be easy to package it up as a module.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文