如何使函数像回调一样

时间:2012-08-07 20:13:43

标签: javascript jquery

shwOpts.show("fast");完成后如何让removeHighlight()行动?

我认为如果我将匿名函数作为参数放在另一个函数中它将作为回调。这没用。

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)
            });

3 个答案:

答案 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();
    }
},

答案 1 :(得分: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控件,当您不将函数作为参数传递给函数时,不会出现任何错误。

答案 2 :(得分: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()

    },