将变量传递给回调方法

时间:2015-10-17 13:47:47

标签: javascript jquery jquery-callback

这个问题与jQueryUI的对话框没什么关系,更多的是与JavaScript有关。

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

以下脚本经过精简以突出显示问题,完整脚本位于https://jsbin.com/muhijodima

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

$(function(){

    ayb={};
    ayb.dialogErrorElem=undefined;

    ayb.dialogError=function(t,e) {
        if (typeof ayb.dialogErrorElem === 'undefined') {
            ayb.dialogErrorElem=$('<div/>').appendTo('body').dialog({
                open: function(event, ui){
                    console.log('dialog.open',t,e);
                    //t=function(){return t;}
                    //e=function(){return e;}
                },
            });
            console.log(ayb.dialogErrorElem);
        };
        ayb.dialogErrorElem.dialog('open');
    }

    $('#e1').click(function(){ayb.dialogError('Title1',['error1-1','error1-2'])});
    $('#e2').click(function(){ayb.dialogError('Title2','error2-1')});

});

2 个答案:

答案 0 :(得分:0)

ayb.dialogErrorElem

点击undefined two后,

button不是#call-to-action a:link, #call-to-action a:visited { color:yellow ; }

jsbin https://jsbin.com/rugarizedo/edit?html,output

答案 1 :(得分:0)

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

下面的简明脚本突出显示概念,以及https://jsbin.com/segoxewape/edit?html,output处的完整脚本。

如果有更好的方法可以在回调中提供参数(我确信有),请发表评论。

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