2012-08-07 24 views
1

如何在removeHighlight()完成後讓shwOpts.show("fast");採取行動?如何使功能像回調一樣行動

我想如果我把一個匿名函數作爲參數在另一個它將作爲回調。這沒有奏效。

removeHighlight : function(f) { 
     // remove previous highlight. 
     var highlight = $('#openid_highlight'); 
     if (highlight) { 
      highlight.replaceWith($('#openid_highlight a')[0]); 
     } 
    }, 


moreOptsLink = $("#more-options-link").click(function() { 
       moreOptsLink.detach(); 
       openid.removeHighlight(function(){$("#show-more-options").show("fast");}); 
       //shwOpts.show("fast"); 
       openid.setPref("showMoreOpenIdOptions", !0) 
      }); 

回答

6

你不執行回調函數

removeHighlight : function(f) { 
    // remove previous highlight. 
    var highlight = $('#openid_highlight'); 
    if (highlight) { 
     highlight.replaceWith($('#openid_highlight a')[0]); 
    } 

    if (typeof(f) === "function") { 
     f(); 
    } 
}, 
+0

謝謝 - 這就是所有?,我認爲它是自動完成的 – Richard 2012-08-07 20:19:45

+0

如果您在另一個函數的主體中創建的匿名函數中傳遞參數,這可能會更有趣,我認爲這是可能的嗎? – Richard 2012-08-07 20:25:15

+0

@Richard我不太清楚,如果我找到了你,但我會試一試:) http://jsfiddle.net/WzjDx/ – Andreas 2012-08-07 20:33:29

0
removeHighlight : function(f) { 
     // remove previous highlight. 
     var highlight = $('#openid_highlight'); 
     if (highlight) { 
      highlight.replaceWith($('#openid_highlight a')[0]); 
     } 
    //you need to call f 
     f() 

    }, 
1

你應該叫這樣的removeHighlight函數的回調:

removeHighlight : function(f) { 
    // remove previous highlight. 
    var highlight = $('#openid_highlight'); 
    if (highlight) { 
     highlight.replaceWith($('#openid_highlight a')[0]); 
     if(typeof f === 'function') { 
      f(); 
     } 
    } 
}, 


moreOptsLink = $("#more-options-link").click(function() { 
    moreOptsLink.detach(); 
    openid.removeHighlight(function(){ 
     $("#show-more-options").show("fast"); 
    }); 
    openid.setPref("showMoreOpenIdOptions", true); 
}); 

通過使用typeof控制,你當你沒有將函數作爲參數傳遞給函數時,不要發生任何錯誤。

+0

小問題:是表達式!0另一種說法是真的,我的意思是爲什麼不說1呢? – Richard 2012-08-07 20:28:12

+0

這跟寫作真的一樣:)我只是從問題中複製它,而我沒有閱讀那部分代碼,我只是閱讀並修復了有問題的部分:) – sedran 2012-08-07 21:45:57

+0

我編輯了代碼。寫作!0是計算機的額外工作,因爲它是不必要的。 – sedran 2012-08-07 21:47:53

相關問題