jQuery中的自定义事件

jQuery中的自定义事件,jquery,Jquery,我试图利用jQuery的自定义事件。在DOM加载时,我使用$.On()将body绑定到自定义事件test。紧接着,我启动了那个活动,一切都按计划进行。但是,任何时候我触发事件(在回调中,从控制台等),都不会发生任何事情。我已经写了一篇JSFIDLE来说明这种情况。有什么想法吗 $(function(){ $('body').on('test', function(){ alert('test triggered'); }); $('body').on('

我试图利用jQuery的自定义事件。在DOM加载时,我使用
$.On()将
body
绑定到自定义事件
test
。紧接着,我启动了那个活动,一切都按计划进行。但是,任何时候我触发事件(在回调中,从控制台等),都不会发生任何事情。我已经写了一篇JSFIDLE来说明这种情况。有什么想法吗

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

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

您的订单错了。这项工作:

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

$(function(){
    $('body').on('test', function(){
        alert('test triggered'); 
    });
    $('body').on('click', '.btn', triggerTest);
    $('body').trigger('test');    
});
现场演示:

显然jQuery会立即执行DOM就绪处理程序,此时,
triggerTest
函数还没有分配。所以,如果你想创建globals,就在ready处理程序上面创建它


顺便说一句,在JSFIDLE中,设置了“onLoad”执行。这意味着JavaScript代码是在窗口“load”上执行的,此时DOM就绪已经发生,这就是为什么jQuery会立即执行代码。

单击锚抛出错误:
TypeError:handleObj.handler.apply不是一个函数。
。问题是,在您尝试将事件处理程序绑定到锚点时,
triggerTest
尚未初始化。如果我更改fiddle设置以将代码包含在文档的
头部
,则它可以正常工作:。为什么?因为现在加载DOM时您正在执行整个代码,即传递给
.ready
的回调将在您为
triggerTest
赋值之前立即执行。感谢您的帮助。答案解决了这个问题,但不是我的问题。我在这里问了一个更具体的问题: