2013-10-28 46 views
2

我创建了一个自定义事件称为foo,我曾在我的代码自定义触发的事件它的缓存由同一个事件处理

var $selector1 = $('#foocontainer .item'); 
var $selector2 = $('#blah .item'); 

$(document).on('foo',$selector1, 
    function(){ console.log('blah'); 
}); 
$(document).on('foo',$selector2, 
    function(){ alert('testing 123...'); 
}); 

注册这两个监听器正如你所看到的选择器和事件处理程序是不同的,为什么当我解开事件的时候,事件处理程序总是捕获它的第一个?我认为每个选择器都有它们的事件处理程序,因此不应混淆。

我解雇与功能触发

$('.item').click(function(){ 
    $(this).trigger('foo'); 
}); 

难道我失去了一些东西的情况?

+2

这里:

$(document).on('foo', $selector1, function(){ console.log('blah'); }); 

您可以通过在报表更改为类似解决这个问题对你是一个小提琴:http://jsfiddle.net/nF943/ – ComFreek

+0

是'#blah .item'的'#foocontainer .item'(反之亦然)的后代?请记住,事件泡沫。您还没有发布足够的代码来重现/解决(或解释,真的)这个问题。 – Adam

+0

也有不知道什么'this'是在你的触发选择 – charlietfl

回答

3

jQuery.on需要一个字符串选择,你是传递一个jQuery对象:

$(document).on('foo', "#d1", function() { 
    // do something 
}); 

jsFiddle

+0

JAJAJA神!非常感谢 – Jorge