2015-10-17 47 views
-1

这个问题与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')}); 

}); 
+0

你是什么意思“变量传递给ayb.dialogError()”? 't'和'e'参数?它们应该在回调中可用。 – hindmost

+0

'',''尾随逗号?在console.log('dialog.open',t,e)之后;'? – guest271314

+0

@ behindmost但他们不是。在jsbin演示中,请尝试单击其中一个按钮,然后单击其中一个按钮。第二次,'e'和't'参数仍然首次使用这些参数。 – user1032531

回答

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

if (typeof ayb.dialogErrorElem === 'undefined') {

ayb.dialogErrorElemundefinedtwobutton

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

+0

是的,那是我的意图,因为我认为这样做是浪费的,而且我明白为什么我得到的结果与他们应该完全一样,在“open”回调中,我希望使用一些额外的回调获得'e'和't'值。 – user1032531

+0

尝试在'close'事件中将'ayb.dialogErrorElem'设置回'undefined'? – guest271314

+0

我欣赏你的帖子和我同意每次创建元素或将其设置回'undefined'都行,但问题是如何在回调中使用传递的参数。 – user1032531