【问题标题】:Writing a callback like the jQuery on click在点击时编写像 jQuery 这样的回调
【发布时间】:2013-10-04 13:39:10
【问题描述】:

在 jQuery 中你可以像这样使用回调:

$('#btn').on('click', function() {
 // code
});

我怎样才能写出像 i.e. 这样的东西

foo.on('bar', function() {  
    // code 
});

foo.on('buzz', function() {  
    //code 
});

?

谢谢。

【问题讨论】:

  • 更重要的是,barbuzz 是什么 :)
  • 你应该看看observer pattern
  • 对不起,这段代码不是 jQuery,但我想要一些“看起来”像它的东西。 foo 在我的例子中是一个我想(不知何故)编写的验证模块。 'bar''buzz' 是来自验证模块的各种结果(因此它们可以是 'success''failure')。只是想保持问题的一般性。

标签: javascript jquery callback


【解决方案1】:

这是一个有效的jQuery语句,调用你需要使用.trigger(eventname)触发事件的方法

喜欢

foo.trigger('foo')

【讨论】:

  • ...假设foo是一个jQuery实例
  • @David yes.. 假设 foo 是一个 jQuery 包装对象
【解决方案2】:

下面的文章会有所帮助

如何在 jQuery 中创建自定义事件

http://www.sitepoint.com/jquery-custom-events/

jQuery 的 .trigger 方法是关键。您可以在任何时候触发具有新类型名称和任意数据的事件,例如

$.event.trigger({
    type: "newMessage",
    message: "Hello World!",
    time: new Date()
});

处理程序现在可以订阅“newMessage”事件,例如

$(document).on("newMessage", newMessageHandler);

【讨论】:

  • 你没有回答问题。
【解决方案3】:

这样:

var eventBus = function () {

    var supportedEvents = ['bar', 'buzz'];

    var subscribers = {};
    for (var i = 0; i < supportedEvents.length; i++) {
        subscribers[supportedEvents[i]] = [];
    }

    return {
        on: function (event, action) {
            subscribers[event].push(action);
        },

        trigger: function (event) {
            var funsToCall = subscribers[event] || []; // empty array if unsupported event
            for (var i = 0; i < funsToCall.length; i++) {
                funsToCall[i](); // calling a function
            }
        }
    }
}

然后您调用eventBus 函数来获取一个对象,该对象将成为您的foo

var foo = eventBus();

foo.on('bar', function () {
    console.log('bar');
});

foo.on('buzz', function () {
    console.log('buzz');
});

foo.trigger('bar'); // prints 'bar' to the console
foo.trigger('buzz'); // prints 'buzz' to the console

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多