是否未调用Javascript回调方法?

是否未调用Javascript回调方法?,javascript,callback,Javascript,Callback,我正在尝试用一个右按钮创建一个可重用的标题对象。我在单击按钮时遇到回调方法问题。从来没有人打过电话 我的目标: myHeader:function(params) { opt = { title: "Title", //header tittle fs: PrecApp.DEFAULT_HEADER_FONTSIZE, //font size ignoreStack :true, //ignore stack

我正在尝试用一个右按钮创建一个可重用的标题对象。我在单击按钮时遇到回调方法问题。从来没有人打过电话

我的目标:

myHeader:function(params)   
{       
    opt = {
        title: "Title",  //header tittle
        fs: PrecApp.DEFAULT_HEADER_FONTSIZE, //font size
        ignoreStack :true, //ignore stack
        height: "70", //header height
        rightButton: {
            show :false, //show right button
            background: "none", //background for right button
            text: "Button", //text for right button
            width: "auto",
            height:"auto",              
            color:"black",
            fontize:1,
            extraCss: null,
            onClick:function(){}
        }
    }
for (i in params) opt[i] = params[i];

    if (opt.rightButton.show){
        var right = $("#header .right");            
        right.click(opt.rightButton.onClick);           

    }       
}
在我的html中:

function updateLayout(){
                PrecAppComponents.myHeader({
                    title:"My Title",
                    fs:1.5,
                    height:50,
                    rightButton:{
                        show:true,
                        background:"#ffff00",
                        text:"Right",
                        width:70,
                        height:30,
                        fontsize:1.1,
                        extraCss: {"float":"left", "font-size":"0.5em"},
                        onClick: PrecAppComponents.toggleDarkOverlay(true)

                    }
}
其他一切都很好。如果我替换

right.click(opt.rightButton.onClick);       


它很好用。我做错了什么?

看起来您的onClick选项正在调用函数。除非该调用返回另一个函数,否则这将不起作用:

onClick: PrecAppComponents.toggleDarkOverlay(true)
您必须将其更改为:

onClick: function() {
  PrecAppComponents.toggleDarkOverlay(true);
}

// or with bind, perhaps

onClick: PrecAppComponents.toggleDarkOverlay.bind(PrecAppComponents, true);

尝试在匿名函数中封装:

right.click(function(){opt.rightButton.onClick();});       

看起来像是
PrecAppComponents。toggleDarkOverlay(true)
不会返回要作为事件处理程序调用的函数-您会立即执行它。您需要使用

function(e) {
    PrecAppComponents.toggleDarkOverlay(true);
}


你怎么知道没有人叫它
function(){}
没有任何作用。请注意
这个
。如果您的
onClick
函数(我假设您在代码的其他地方使用了它)使用
this
,它将不会被设置为
opt.rightButton
,除非您明确地这样做(例如使用
bind
)。我猜使用
for(I in params)opt[I]=params[I]
他试图用
参数扩展
opt
。在html中,当我创建标题时,我覆盖了所有选项,包括onClick:precapcomponents。toggleDarkOverlay(true)看起来像是你想要的onClick正在调用函数,而不是返回一个。钉住了!如果在HTML覆盖中使用匿名函数,那么它会很有魅力!谢谢!我还在学习这个js技巧!我会在5分钟内接受你的回答,所以让我:)。
function(e) {
    PrecAppComponents.toggleDarkOverlay(true);
}
PrecAppComponents.toggleDarkOverlay.bind(PrecAppComponents, true)