2014-10-11 61 views
2

試圖做一些相當簡單的事情..我有一個點擊事件設置爲少數錨點,如代碼中所描繪的。在click事件函數中,我有一個回調函數。我想阻止錨點開火,直到淡出完成,然後重新開火。這是我迄今爲止收集到的,哪個不起作用。我漸漸淡去,然後沒有任何反應。如何在淡出回調中重新觸發點擊事件?

$('#desktop_nav ul').find('a').click(function(e) 
{  
    var that = this; 
    //console.log(that); 

    // prevent fade from firing on mid-click 
    if (e.which != 2) 
    {   
     e.preventDefault(); 

     $('html').fadeOut(2000, function(){ 
      //console.log(that); 
      that.bind('click', function(){ 
       $(this).trigger('click'); 
       // returns "Uncaught TypeError: undefined is not a function" 
      }); 
     }); 
    } 
}); 

一直在尋找通過堆棧的一些答案,但看起來像我缺乏一些知識,以充分理解這些。

謝謝!

+0

您正在觸發不存在的事件上的點擊事件。那是什麼 ? – Meer 2014-10-11 21:28:24

+0

我想你應該試試$(this).on('click',function(){// code here}); – Meer 2014-10-11 21:30:19

+0

你是什麼意思?那=這。我必須這樣做,因爲淡出回調中的'this'被限定爲'html',因此不會針對被點擊的錨定。 – adi518 2014-10-11 21:31:09

回答

2

that指原始DOM元素

您需要使用$(that).bind(...)


結合的處理程序邏輯(因爲你var that = this設置),當點擊就會觸發點擊本身是有缺陷的,因爲它會造成無限循環或觸發自身。

你只是需要手動觸發click淡出完成時

$('html').fadeOut(2000, function(){ 
     //console.log(that); 
     $(that).trigger('click'); 
    }); 

嘗試

$('html').fadeOut(2000, function(){ 
     //console.log(that); 
     window.location.href = that.href; 
    }); 
+0

謝謝。做過某事。仍然沒有快樂。 :\ – adi518 2014-10-11 21:38:27

+0

@ gay aka。爲什麼這個內在觸發器不會進入無限循環? – Meer 2014-10-11 21:41:08

+0

@asde您無法通過javascript觸發正常點擊。 'trigger('click')'只會觸發綁定到元素的jQuery處理程序。 – 2014-10-11 21:41:10

1

好吧,這精美的作品!

$('#desktop_nav ul').find('a').click(function(e) 
{ 
    var that = this; 

    // prevent fade from firing on mid-click 
    if (e.which != 2) 
    {   
     e.preventDefault(); 

     $('html').fadeOut(2000, function(){ 
      window.location.href = that.href; 
     }); 
    } 
}); 
+0

與gaby給出的答案相同嗎? – Meer 2014-10-11 21:59:51

+0

是的。我根據他的建議調整了我的初始代碼。現在我的網站在頁面轉換之間有很好的平滑淡入淡出效果。 – adi518 2014-10-11 22:01:09

+0

如果他的答案是正確的。你可以標記他的答案是正確的。你怎麼看 ? – Meer 2014-10-11 22:05:14

相關問題