2012-06-04 56 views
10

任何人都可以告诉我为什么这段代码不工作吗?jQuery触发器没有用bind()或on()为自定义事件触发

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

$('body').trigger('test'); 

我使用jQuery的1.7.2.min。我没有得到任何错误,只是没有任何反应。

我试过把代码放在一个内联脚本里面,在$(document).ready()里面,而且什么也没有。我也试过on()bind(),都没有结果。我看到所有示例都显示相同的语法,那么与此有什么不同呢?

+0

它只是在这里工作正常检查,http://jsfiddle.net/joycse06/XXXhQ/ –

+0

是啊你的语法与自定义事件一起工作 – mprabhat

+0

奇怪..这些例子都可以工作,但它不在我的页面中。今天早上我刚刚将我的jQuery从1.6.4更新到了1.7.2,可能在我的服务器上存在一些缓存问题?我明白'on()'没有实现,直到1.7 – IamFace

回答

8

看来问题在于DOM以某种方式准备好了。将代码放在内联脚本中将不起作用。将其置于$('document').ready()内将一个匿名函数的工作,但由于某种原因没有一个函数调用与“()”。这个代码工作

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

$('body').trigger('test'); 
} 

但这丝毫不... *注意函数调用插入语。

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

$('body').trigger('test'); 
} 

一个确切的例子适用于jsfiddle两种方式,但由于某些原因只有一个办法作品在我的服务器上。我想提出另一个问题的原因,但至少我们可以看到这个代码实际上工作,有一些奇怪的异常与我的东西:/

+8

这是因为你的语义不正确。 start()会传递你的启动函数的返回值。而当文档准备就绪时,开始将传递要执行的功能。通常,人们传递匿名函数:$(function(){/ * my stuff here * /}); – Jeff

+0

@Jeff +1谢谢 – Chris22

+0

谢谢这对我也有效。在“on”声明中添加文档准备就绪! –

1

尝试代表团:

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

$('body').trigger('test'); 

这就像活的()使用。 http://api.jquery.com/live/

+0

你的代码没有反映OP想要的内容。 OP的问题不是委托,而是自定义事件 – thecodeparadox

+1

这是一个自定义事件,你是对的他的代码应该工作,我只是从经验知道有时候以这种方式绑定事件(甚至自定义事件)比直接绑定更容易。从文档:事件处理程序仅绑定到当前选定的元素;它们必须在代码调用.on()时存在于页面上。当然身体应该存在,但是在他们的情况下发生了一些奇怪的事情,我们无法看到,这会克服这一点。 (理论上)。 ;) – Jeff