1

我有jsfiddle代码。我是什么,我有一个Cal对象,它由init函数和另一个名为Event. 在里面Event我有两个函数initshow. 我正在做的是调用对象init的函数Cal并在那里传递参数。在这个init函数里面我打电话Event'sinit函数并在此处传递相同的参数。在这个函数内部,当用户单击控制台中显示的链接时,init我正在调用内部函数。但是当我运行此代码时,它会在单击之前显示在控制台中。为什么以及如何使其工作,以便在单击 .button 时显示参数?showEvent.buttonparamparam.button

这是我的代码

var Cal = {
    init: function (param) {
        this.param = param;
        Cal.Event.init(this.param);
    },

    func: function () {},

    Event: {
        init: function (param) {
            $('.button').on('click', this.show(param));
        },

        show: function (param) {
            console.log(param);
        }
    }
}

Cal.init('para');
4

3 回答 3

4

.on() 期望参数 2 是一个函数,而不是该函数的返回值

$('.button').on('click', function() {
    // Here this points to the button DOM object.
    Cal.Event.show(param)
});
于 2013-04-13T07:33:27.520 回答
2

this.show(param)马上打电话。将其更改为:

init: function (param) {
    $('.button').on('click', $.proxy(function() {
        this.show(param);
    }, this));
},

http://jsfiddle.net/9SLEX/3/

于 2013-04-13T07:39:38.917 回答
2

在这行代码中:

init: function (param) {
    $('.button').on('click', this.show(param));
},

您正在调用show函数,然后将其返回值传递给on,因此它会在您调用Cal.Event.init. 当点击发生时,您没有提供on要调用的代码。为此,请将其放入事件处理函数中:

init: function (param) {
    $('.button').on('click', function() {
        Cal.Event.show(param);
    });
},

请注意,我更改thisCal.Event因为在对处理函数的调用中,this将是对按钮的引用,而不是Cal.Event.

于 2013-04-13T07:35:18.353 回答