2012-03-19 76 views
2

我一直在使用它几个小时,这让我很生气。我点击链接弹出一个模式窗口。它有一个CSS过渡,所以它淡入。我需要为该过渡完成时的回调。所以我挖了这个事件监听器:Javascript事件监听器失败,因为“undefined”不是函数

$('#tagBox').addEventListener(
    'webkitTransitionEnd', 
    function(event) { 
     alert("Finished transition!"); }, 
    false); 

我在Safari中来,但是该代码返回此错误:

TypeError: 'undefined' is not a function (evaluating '$('#tagBox').addEventListener('webkitTransitionEnd', function(){ alert("Finished transition!") }, false)')

是我的语法是否正确?我可以做alert($('#tagBox')),它返回[object],所以它找到了模态元素。为什么说undefined不是函数?

谢谢。

+0

为什么不使用'bind'而不是? – inhan 2012-03-19 01:54:10

+0

这会一再重复,对吧? – alt 2012-03-19 02:01:35

+0

只有当事件类型被触发时... – inhan 2012-03-19 11:41:47

回答

2

东西想是:

$('#tagBox').bind('webkitTransitionEnd', function() { 
    //.... 
}); 

如果你想只启动一次,你可以使用.one

$('#tagBox').one('webkitTransitionEnd', function() { 
    //.... 
}); 
+0

这一遍遍地重复,我怎么才能完成它 – alt 2012-03-19 02:00:38

+0

当转换结束时触发事件,你是什么意思“重复”? – xdazz 2012-03-19 02:12:45

+0

对不起,我在#tagbox中有一堆转换。通过在该绑定事件中执行$(this).unbind()来修复。 – alt 2012-03-19 02:14:00

1

您是否缺少事件参数?

box.addEventListener( 
'webkitTransitionEnd', 
function(event) { 
    alert("Finished transition!"); 
}, false); 
1

如果你使用的是最新版本的jquery 1.7+你实际上会在寻找“on” http://api.jquery.com/on/这将允许你添加你的事件到它。

$('#tagBox').on('webkitTransitionEnd', function(event) { alert('whatever'); }); 

结合jQuery off

$('#tagBox').on('webkitTransitionEnd', function(event) { 
    $('#tagBox').off('webkitTransitionEnd'); 
    alert('whatever'); 
}); 
+0

这是一遍又一遍的循环。我想山雀只发生一次。 – alt 2012-03-19 01:59:56

6

$( '#tagBox')返回不具有addEventListener方法这是一种天然方法一个jQuery元件。您需要在调用addEventListener之前获取原始DOM,方法是:

$('#tagBox')[0].addEventListener(// your code