-1

我正在尝试使用右键创建一个可重用的 Header 对象。我在单击按钮时的回调方法有问题。它从来没有被调用过。

我的对象:

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

 right.click(function(
  console.log("clicked")
));     

它工作正常。我究竟做错了什么?

4

3 回答 3

1

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

onClick: PrecAppComponents.toggleDarkOverlay(true)

您必须将其更改为:

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

// or with bind, perhaps

onClick: PrecAppComponents.toggleDarkOverlay.bind(PrecAppComponents, true);
于 2012-11-15T16:12:11.887 回答
0

似乎PrecAppComponents.toggleDarkOverlay(true)返回要作为事件处理程序调用的函数-您立即执行它。您将需要使用

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

或者

PrecAppComponents.toggleDarkOverlay.bind(PrecAppComponents, true)
于 2012-11-15T16:16:45.413 回答
0

尝试封装在匿名函数中:

right.click(function(){opt.rightButton.onClick();});       
于 2012-11-15T16:13:08.407 回答