【问题标题】:How do i open an ajax loaded jQuery UI dialog?如何打开一个 ajax 加载的 jQuery UI 对话框?
【发布时间】:2013-03-12 04:25:06
【问题描述】:

我正在尝试打开一个 jQuery UI 对话框,其中的 HTML 已由 ajax 加载,但我只收到警报。

    $(document).on("click",'#dialog-button',function(){
        alert('this works');
        $('#dialog').dialog('open');//this doesn't
    });

当我将 html 放入模板中而不使用 ajax(和 .on)时,我没有遇到任何问题。

对话框 html 由 ajax 加载,类似于此:

$.ajax({

type: "GET",
dataType: "json",
url: href,

success: function(data){

$('#dialog-container').html(data.dialog);

}

});

在我的 php 中,我会做这样的事情:

<?php 
 //assign some variables
 $array = array('dialog' => $this->smarty->fetch('dialog.tpl'));
 echo json_encode($array);
 ?>

这行得通:

$(document).on("click",'#dialog-button',function(){

    alert('this works');

    $('#dialog').dialog({

    autoOpen : true,
    height   : 500,
    width    : 1000,
    modal    : true,
    buttons  : {

        save  : function() {

            sendForm();
            $(this).dialog('close');

        },

        cancel : function() {

            $(this).dialog('close');

        },

        close    : function(){

            allFields.vall('').removeClass('ui-sate-error');

        },

    }

})

})

【问题讨论】:

  • 你是否包含了 jQuery Ui 库?似乎还有一个额外的});
  • 我正在使用谷歌图书馆

标签: jquery ajax jquery-ui jquery-ui-dialog


【解决方案1】:

加载对话框内容后,你需要实际创建对话框:

success: function(data) {
    $('#dialog-container').html(data.dialog);
    $('#dialog').dialog({
       ...,
       autoOpen: false
    });
},

然后您上面的代码实际上会使其出现:

$(document).on("click",'#dialog-button', function() {
    $('#dialog').dialog('open');
});

确保#dialog 最初是隐藏的,否则对话框的内容会在它们变成对话框之前出现在页面上。

【讨论】:

  • 我按照你说的做了,首先加载了内容,然后我创建了对话框。它似乎没有任何区别。
  • @user2157854 所以请在您的问题中添加有关如何加载内容的详细信息 - 不要忘记这将是一个异步操作。
  • 当我只使用 $('#dialog').dialog() 时,我得到了对话框,但它缺少按钮并且更小。
  • @user2157854 当然,您仍然需要提供各种选项来配置对话框。但只有一次,当你创建它时,而不是当你打开它时。
猜你喜欢
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多