2013-07-14 21 views
0

我在這個問題上掙扎了幾個小時,但沒有成功的跡象。我正在嘗試實現Facebook登錄。這是我的代碼:遞歸過多 - jquery - 爲什麼?

function fblogin() { 
FB.login(function(response) { 
    if (response.authResponse) { 
     var url = '/me?fields=name,email'; 
     FB.api(url, function(response) { 
      $('#email_login').val(response.email); 
      $('#pwd_login').val(response.name); 
      $('#sess_id').val(response.id); 
      if($('#evil_username').val()==""){ 
       $('#loginform').submit(); 
      }else{ 
      // doh you are bot 
      } 
     }); 
    } else { 
     // cancelled 
    } 
    }, {scope:'email'}); 
} 

但一旦我點擊Facebook登錄按鈕,我得到控制檯too much recursion。這是爲什麼?關於這個問題,我在這裏閱讀了很多關於stackoverflow的問題,但是無法找到我的案例的線索。

我沒有在這裏遞歸,但發生了什麼導致遞歸?

並且存在從

window.fbAsyncInit = function() { 
FB.init({ 
    appId  : 'xxxxxxxxxxxxx', 
    channelUrl : '//www.mydomain.de/channel.html', 
    status  : true, 
    cookie  : true, 
    xfbml  : true 
}); 
// Additional init code here 
FB.getLoginStatus(function(response) { 
if (response.status === 'connected') { 
     // connected 
} else if (response.status === 'not_authorized') { 
     // not_authorized 
     fblogin(); 
} else { 
     // not_logged_in 
     fblogin(); 
} 
}); 
}; 

並且還從正常LOGIN按鈕,這觸發fblogin()呼叫它。

+1

你打這個電話過得怎麼樣? – SLaks

+0

設置'event.preventBubble = true' –

+0

@SLaks,請參閱我的更新。我添加了我如何調用fblogin() – doniyor

回答

4

我看不到你的onclick代碼是什麼,或者調用fblogin()的動作,我假設問題是當fblogin()被調用。

function fblogin(event) { 
    event.stopPropagation(); 

爲每個功能添加一個事件參數fblogin(event)調用,這樣可以跨瀏覽器兼容。

當事件發生時,它會遍歷到父元素,以便它們可以繼承事件處理函數,在您的情況下爲function fblogin()。當您停止傳播stopPropagation()時,您停止DOM遍歷,並且如果stopPropagation已設置,則調用該函數的元素將不會將處理程序傳遞給父項。這一切都意味着瀏覽器將停止循環所有的DOM元素,並使您的jquery更少遞歸。

+0

感謝傑伊的代碼,非常有用的信息。你能向我解釋一下這會做什麼? – doniyor

+0

@ doniyor我向編輯添加了解釋 –

+0

@ doniyor你使用最新的jQuery版本嗎? –