如何在打开jQueryUI对话框后执行函数?

8
在我的网页上,我有一些链接,例如:
<div id="toolbarButtons">
    <a href="actualites/addLink" id="liens" rel="lien" title="Insérer un lien" class="toolbarButton"><span><img src="pub/struct/picto/icon_toolbar-link.gif" alt="Liens" />Lien</span></a>
    <a href="actualites/addImage" rel="image" title="Insérer une image" id="img" class="toolbarButton"><span><img src="pub/struct/picto/icon_toolbar-img.gif" alt="Liens" /> Image(s)</span></a>
</div>
<div id="dialogbox"></div>

首先,我通过调用以下方法初始化我的对话框:

initDialog : function() {
    $('#dialogbox').dialog({
        bgiframe:true,
        autoOpen:false,
        width:500,
        modal:true
    });
}

然后我在点击事件上附加对话框:
$('.toolbarButton').click(function(e){
            e.preventDefault();
            actu.dialogManager($(this));
});

dialogManager : function(elem) {

    elem.blur();
    var title   = elem.attr('title');
    var href    = elem.attr('href');
    var rel     = elem.attr('rel');

    $('#dialogbox').dialog('option','title',title);

    if(rel == 'lien')
    {
         $('#dialogbox').dialog('option','buttons',{
            'Add' : function(){
                            //TODO
            },
            'Cancel' : function(){
                $('#linkText').val('');
                $('#linkUrl').val('');
                $(this).dialog('close');
            }
        });

        $('#dialogbox').load(href).dialog('open');

    }
}

正如您所看到的,对话框的内容是通过ajax获取的。对话框包含一些输入框。我有一个最后的函数,它应该编辑输入框的内容,但我不知道在哪里调用它。它需要在打开对话框之后才能有效地被调用。我该怎么做呢?

将其放在对话框打开后立即执行。

$('#dialogbox').load(href).dialog('open');

由于异步加载的原因,这不起作用(在对话框完全加载之前调用)。
感谢您的帮助。
2个回答

28

当对话框打开时,您可以执行某些操作。

initDialog : function() {
  $('#dialogbox').dialog({
      bgiframe:true,
      autoOpen:false,
      open: function() {
          // do something on load
       },
      width:500,
      modal:true
  });
}

2

你能做类似这样的事情吗?

$('#dialogbox').load(href, function() {
   //your edit function?
   $(this).dialog('open');
   });

当加载完成时,该函数将被调用。

3
这不是一个答案。 - tishma
2
这实际上是正确的答案。问题的核心在于他想要在执行函数之前等待加载完成,为了做到这一点,应该使用加载回调,如下所示。 - little_birdie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接