2012-03-19 77 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