是否未调用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)