对于自定义事件,jQuery触发器不会使用bind()或on()触发

Iam*_*ace 11 jquery triggers bind custom-events jquery-events

任何人都可以告诉我为什么这段代码不起作用?

$('body').on('test', function() {
  alert('test');
});

$('body').trigger('test');
Run Code Online (Sandbox Code Playgroud)

我正在使用jquery-1.7.2.min.我没有得到任何错误,只是没有任何反应.

我已经尝试将代码放在内联脚本中,$(document).ready()但仍然没有.我也试过都on()bind()和没有结果.我看到所有示例都显示相同的语法,所以有什么不同呢?

Iam*_*ace 8

似乎问题在于DOM在某种程度上准备好了.将代码放在内联脚本中是行不通的.将它放在一个$(document).ready()将使用匿名函数,但由于某种原因不是一个函数调用'()'..这段代码工作

$(document).ready(start);
function start(){
$('body').on('test', function() {
  alert('test');
});

$('body').trigger('test');
}
Run Code Online (Sandbox Code Playgroud)

但这没有...*注意函数调用括号.

$(document).ready(start());
function start(){
$('body').on('test', function() {
  alert('test');
});

$('body').trigger('test');
}
Run Code Online (Sandbox Code Playgroud)

一个确切的例子在jsfiddle上有两种方式,但由于某种原因,只有一种方法可以在我的服务器上运行.我想提出另一个问题,但至少我们可以看到这段代码确实有效,我的东西有一些奇怪的异常:/

  • 那是因为你的语义不正确.start()将传递start函数的返回值.而start将传递文档准备好时要执行的函数.通常,人们传递匿名函数:$(function(){/*我的东西在这里*/}); (8认同)