用jquery对话框替换javascript弹出窗口

时间:2012-01-04 22:42:37

标签: jquery jquery-ui

我正为webtrees制作自定义主题。 webtrees使用了很多弹出窗口,我想用jquery对话框替换它们,但我不想搞乱核心代码。因此jquery脚本必须覆盖原始函数和onclick事件。我在互联网上搜索过但没有找到解决方案。希望你们中的一些人可以帮助我。

这是我要覆盖的功能之一:

var helpWin;
function helpPopup(which, mod) {
    if (which==null) which = "help_contents_help";
    if (mod!='') which=which+'&mod='+mod;
    if ((!helpWin)||(helpWin.closed)) {
        helpWin = window.open('help_text.php?help='+which,'_blank','left=50,top=50,width=500,height=320,resizable=1,scrollbars=1');
    } else {
        helpWin.location = 'help_text.php?help='+which;
    }
    return false;
}
function closeHelp() {
    if (helpWin) helpWin.close();
}

html看起来像这样:

<a class="help" onclick="helpPopup('index_charts','charts'); return false;" href="#">

我为jquery对话尝试了几个jquery解决方案,但没有一个工作。

任何解决方案?

2 个答案:

答案 0 :(得分:0)

尝试这样的事情: http://jsfiddle.net/sottenad/b2JY9/

您应该能够使用$ .ajax调用替换window.open调用,然后检测对话框以显示您获取的内容。然后打开对话框,或者如果已经打开,只需替换现有内容。

注意:小提琴不会执行,但更容易阅读那里的代码。

答案 1 :(得分:0)

首先,我不是一个jquery专家,所以也许事情可以做得更好,但我设法从原来的onclick事件中检索一个对话框。这是使事情发生的代码:

$('a.help').livequery(function(){
        var cl = $(this).attr('onclick');
        var str = cl.split("('").pop().split("')").shift();
        var arr = str.split("','");     
        if (arr[1] == '') {
            qvar = arr[0];
        }
        else {
            qvar = arr[0]+'&mod='+arr[1];
        }       
        $(this).removeAttr('onclick');
        $(this).attr('href', 'help_text.php?help='+qvar);

        var $link = $(this);        
        var $dialog = $('<div id="help-dialog"></div>')
            .load($link.attr('href'))
            .dialog({
                autoOpen: false,                
                width: 500,
                modal: true         
            });

        $link.click(function() {
            var htitle = $dialog.find('.helpheader');
            htitle.hide();
            $dialog.dialog( 'option', 'title', htitle.text() ); 
            $dialog.find('.helpfooter').remove();
            $dialog.dialog('open');
            return false;
        });
    });

首先,我从onclick值创建了一个链接,并将其放在href属性中。这样我就可以将href链接中的页面内容放到对话框中。

有一件事我无法上班。在对话框内容中,页脚中有两个链接。暂时我只是删除了页脚的内容,但这不是我最终想要的。

一个链接是一个密切链接。我尝试使用此代码:

$dialog.find('.helpfooter a[onclick*="close"]');
closelink.removeAttr('onclick');
closelink.click(function() {
    $dialog.dialog('close');
});

它正在工作,但它也刷新了主页,我希望它的行为方式与对话框右上角的默认关闭按钮相同,因此无需刷新页面。我怎么能这样做?

页脚中的第二个链接是指向另一个(常规)页面的链接。单击此链接时,我想关闭当前对话框并使用新页面的内容打开一个新对话框。那可能吗?如果是这样,我怎么能这样做。