jQuery中的自定义事件
我试图利用jQuery的自定义事件。在DOM加载时,我使用jQuery中的自定义事件,jquery,Jquery,我试图利用jQuery的自定义事件。在DOM加载时,我使用$.On()将body绑定到自定义事件test。紧接着,我启动了那个活动,一切都按计划进行。但是,任何时候我触发事件(在回调中,从控制台等),都不会发生任何事情。我已经写了一篇JSFIDLE来说明这种情况。有什么想法吗 $(function(){ $('body').on('test', function(){ alert('test triggered'); }); $('body').on('
$.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
赋值之前立即执行。感谢您的帮助。答案解决了这个问题,但不是我的问题。我在这里问了一个更具体的问题: