0

我正在尝试利用 jQuery 的自定义事件。在 DOM 加载body时,我test使用$.on(). 紧接着,我触发了那个事件,一切都按计划进行。但是,任何其他时间我触发事件(在回调中,从控制台等),什么都没有发生。我写了一个 jsfiddle 来说明这种情况。有任何想法吗?

$(function(){
    $('body').on('test', function(){
        alert('test triggered'); 
    });
    $('body').on('click', '.btn', triggerTest);
    $('body').trigger('test');    
});

var triggerTest = function(){
    $('body').trigger('test');
}

http://jsfiddle.net/vgEzD/

4

1 回答 1

2

你的订单是错误的。这有效:

var triggerTest = function(){
    $('body').trigger('test');
}

$(function(){
    $('body').on('test', function(){
        alert('test triggered'); 
    });
    $('body').on('click', '.btn', triggerTest);
    $('body').trigger('test');    
});

现场演示:http: //jsfiddle.net/simevidas/vgEzD/3/

显然 jQuery 会立即执行 DOM 就绪处理程序,此时triggerTest尚未分配该函数。所以,我想创建全局变量,在准备好的处理程序之上执行。

顺便说一句,在您的 jsFiddle 中,设置了“onLoad”执行。这意味着 JavaScript 代码是在窗口“加载”时执行的,此时 DOM 已经准备好,这就是 jQuery 立即执行代码的原因。

于 2013-06-19T23:13:17.920 回答