这个事件功能没有触发的原因吗?

时间:2014-03-07 15:41:12

标签: javascript jquery this

我有一组jQuery对象被推入'sections'数组。我添加一个.on事件监听器,我是console.log-ing来检查函数是否被调用,但事实并非如此。

sections.push($('#section' + p_sectionIndex));
sections[sections.length-1].on('show', this.showSection);

this.showSection = function() {
    console.log("Section should show");
}

我在代码的其他地方打电话:

sections[showIndex].trigger('show');

我做错了什么?

1 个答案:

答案 0 :(得分:4)

当您使用this.showSection时,它未定义,因为function expression尚未执行。因此处理程序未注册

this.showSection = function () {
    console.log("Section should show");
}

sections.push($('#section' + p_sectionIndex));
sections[sections.length - 1].on('show', this.showSection);

演示:Fiddle

但如果您使用function declaration,则会获得hoisted

jQuery(function () {
    function handler1() {
        console.log('handler1')
    }

    console.log('handler1', handler1)
    console.log('handler2', handler2)
    $('button').on('click', handler1).on('click', handler2)

    function handler2() {
        console.log('handler2')
    }
})

演示:Fiddle