Javascript 将变量传递给回调方法

Javascript 将变量传递给回调方法,javascript,jquery,jquery-callback,Javascript,Jquery,Jquery Callback,这个问题与jQueryUI的对话框关系不大,而与JavaScript关系更大 我将一些变量传递给ayb.dialogError(),并使用它们创建一个对话框。然后我传递不同的值,但仍然使用第一个值 下面的脚本经过压缩以突出显示问题,完整脚本位于 在open回调中,如何访问传递给ayb.dialogError()的变量 $(函数(){ ayb={}; ayb.dialogErrorElem=未定义; ayb.dialogError=函数(t,e){ 如果(类型为ayb.dialogErrorEle

这个问题与jQueryUI的对话框关系不大,而与JavaScript关系更大

我将一些变量传递给
ayb.dialogError()
,并使用它们创建一个对话框。然后我传递不同的值,但仍然使用第一个值

下面的脚本经过压缩以突出显示问题,完整脚本位于

open
回调中,如何访问传递给
ayb.dialogError()
的变量

$(函数(){
ayb={};
ayb.dialogErrorElem=未定义;
ayb.dialogError=函数(t,e){
如果(类型为ayb.dialogErrorElem===‘未定义’){
ayb.dialogErrorElem=$('').appendTo('body').dialog({
打开:功能(事件、用户界面){
console.log('dialog.open',t,e);
//t=函数(){return t;}
//e=函数(){return e;}
},
});
控制台日志(ayb.dialogErrorElem);
};
ayb.dialogErrorElem.dialog(“打开”);
}
$('#e1')。单击(函数(){ayb.dialogError('Title1',['error1-1','error1-2']);
$('#e2')。单击(函数(){ayb.dialogError('Title2','error2-1'));
});
At
if(typeof ayb.dialogErrorElem==='undefined'){

ayb.点击
two
按钮时,对话框ErrorElem
未定义


jsbin

我认为这不是最好的方法,但是,传递的参数可用于
open
回调

下面是浓缩的脚本以突出概念,完整的脚本位于

如果有更好的方法使参数在回调中可用(我肯定有),请发表评论

ayb.dialogError=function(t,e) {
    getEm=function(){return {e:e,t:t};}
    var v={e:e,t:t};    //Won't work
    if (typeof this.dialog === 'undefined') {
        this.dialog=$('<div/>', {})
        .dialog({
            open: function(event, ui){
                console.log('Wrong values in dialog.open!',t,e,v.t,v.e);
                var o=getEm();
                console.log('Right values!',o);
            }
        });
    };
    this.dialog.dialog('open');
}
ayb.dialogError=函数(t,e){
getEm=function(){return{e:e,t:t};}
var v={e:e,t:t};//不起作用
if(typeof this.dialog===‘未定义’){
this.dialog=$('',{})
.对话({
打开:功能(事件、用户界面){
log('dialog.open!中的值错误!',t,e,v.t,v.e);
var o=getEm();
log('Right values!',o);
}
});
};
this.dialog.dialog('open');
}

您所说的“传递给ayb.dialogError()的变量”是什么意思?
t
e
参数?它们应该在回调中可用。
}处的尾随逗号,
?以下
console.log('dialog.open',t,e)?@最后面的,但它们不是。在jsbin演示中,尝试单击其中一个按钮,然后单击另一个按钮。第二次,
e
t
参数仍然使用第一次使用的参数。@guest271314应该没关系。@hindmost我只在第一次创建对话框时传递参数,因此它当然只使用阀门。相反,我需要回调函数不要像最初创建时那样使用它们,而是从上面以某种方式获取它们。这就是为什么我认为它们应该是
t=function(){return t;}
,但这也不起作用。是的,这是我的意图,因为我认为不这样做是浪费。我也明白为什么我得到的结果完全是他们应该得到的。在
open
回调中,我的希望是使用一些额外的回调来获取
e
t
值。尝试设置
ayb。dialogErrorElem
返回
未定义的
关闭
事件中?我感谢您的帖子,我同意每次创建元素或将其设置回
未定义的
都会起作用,但问题是如何在回调中使用传递的参数。@user1032531。添加了
ayb.dialogErrorElem=未定义下面的
$(this).dialog(“close”)参见输出,
控制台
ayb.dialogError=function(t,e) {
    getEm=function(){return {e:e,t:t};}
    var v={e:e,t:t};    //Won't work
    if (typeof this.dialog === 'undefined') {
        this.dialog=$('<div/>', {})
        .dialog({
            open: function(event, ui){
                console.log('Wrong values in dialog.open!',t,e,v.t,v.e);
                var o=getEm();
                console.log('Right values!',o);
            }
        });
    };
    this.dialog.dialog('open');
}