【问题标题】:jQuery UI Dialog - change the content of an open dialog (Ajax)jQuery UI Dialog - 更改打开对话框的内容 (Ajax)
【发布时间】:2010-07-28 20:49:26
【问题描述】:

我有一些链接想要在 jQuery UI 对话框中使用jQuery.load() 动态打开。对话框打开后,我希望将链接加载到已打开的对话框中。

  1. 因此,网站加载后,您单击一个链接,它会在一个对话框中打开。没关系。您可以根据需要多次关闭和打开它。
  2. 当它打开时,如果您单击加载内容中的链接之一,它将不起作用。
    • 已执行Ajax GET 请求,但结果内容未成功加载到对话框中。 (Firebug 显示请求)
    • 先前的对话框标题和对话框内容被删除。但是新内容没有显示,也没有插入到 DOM 中。 (生成的源不会在任何地方显示内容。)

链接看起来像这样...

<a href="http://www.example.com/index.php?action=something&amp;search=somethingelse#fragment" rel="dialog" title="Title Attribute">

点击事件被绑定...

$('body').delegate("a[rel~=dialog]", "click", function(e){return ajax_dialog(this, e);});

ajax_dialog 函数检查是否有对话框,如果没有则调用创建一个对话框,调用加载内容,设置标题,如果没有打开则打开对话框。

function ajax_dialog(_this, _event){
    var urlToLoad = $(_this).attr("href").replace("#", "&ajax=true #");
    var linkTitle = $(_this).attr("title");

    // Create dialog
    if(!$('body').find('#ajaxDialog').size()){
        $('body').append('not yet init<br />'); // This shows up the first click only.
        init_dialog('#ajaxDialog');
    }

    // Load Dialog Content
    load_dialog('#ajaxDialog', urlToLoad);

    // Add title
    $('#ajaxDialog').dialog('option', 'title', linkTitle);

    // Open dialog (or reload)
    if(!$('#ajaxDialog').dialog('isOpen')){
        $('#ajaxDialog').dialog('open');
        $('body').append('not yet open<br />'); // This shows up the first click only.
    }
    return false;
}

init_dialog 函数会在没有对话框时创建对话框...

function init_dialog(_this){
    $('body').append('<div id="ajaxDialog"></div>');
    // Set Dialog Options
    $(_this).dialog({
        modal:true,
        autoOpen:false,
        width:900,
        height:400,
        position:['center','center'],
        zIndex: 9999,
        //open:function(){load_dialog(this, urlToLoad);}, This didn't work without destroying the dialog for each click.
        close:function(){$(this).empty();}
    });
}

load_dialog 函数将所需内容加载到对话框中。

function load_dialog(_this, urlToLoad){
    $(_this).load(urlToLoad, function(){
        $('body').append(urlToLoad + ' load function<br />'); // This shows up each click
        $(_this).append("Hihi?"); // This shows up each click
    });
    // The loaded information only shows the first click, other times show an empty dialog.
}

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-ui-dialog jquery-load


    【解决方案1】:

    哈。如代码所示,我使用$jQuery.load() 并将链接的确切href 作为URL 来请求。所有 URL 的末尾都有片段/锚点,即:....html#id-of-div

    在这种情况下,脚本本身运行良好,但页面上尚不存在#id-of-div。这就是为什么我可以看到返回的内容,但对话框最终是空白的。 :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多