关闭Iframe模式框后刷新父页面

时间:2011-02-21 16:25:29

标签: javascript forms iframe modal-dialog

基础知识: 我有一个用户可以“添加文章”的网页;当他们点击“添加文章”时,会打开一个iframe(一个弹出模式框)。

在iframe中有一个带有“保存”和“取消”按钮的表单 - 我要做的就是当用户点击“保存”时,它会关闭模式框,然后刷新页。

我设置了iframe关闭,数据保存到数据库,但我无法刷新页面(然后会显示新文章)

尽管谷歌上了好几天,但我还是无法做到这一点。我不是一个javascript专家,但是我在过去的几天里已经学到了足够的知识来做一两件事。

以下是按钮的代码:

<a class="toolbar" href="#" onclick="javascript: submitbutton('save'); return false;">

以下是处理数据保存的javascript函数的结束:

    function submitbutton(pressbutton) {
...
            <?php endif; ?>
            submitform( pressbutton );

        parent.$('sbox-window').close();    

        }


    }

4 个答案:

答案 0 :(得分:2)

http://community.getk2.org/forum/topics/solved-adding-articles-on-the?xg_source=activity

这个链接是我正在寻找的解决方案 - 这个问题最初是针对Joomla的K2组件。

我自己和另一个人能够通过编写我们自己的一些代码来解决问题。在该主题以及回复中链接的主题中,就会有一个解决方案。

编辑:有人要求在此处发布解决方案,所以这里是一个简短的摘要

如果您有用户从前端创建文章,并且您希望“保存”按钮关闭在添加或编辑文章时弹出的模型框窗口 - 只需按照以下步骤实现此目的:

*注意:还有一些其他修复工具可以关闭该框,但不会刷新页面 - 这两者都有。

关键是通过在用户点击“保存”时创建的URL传递额外参数,然后我们只检查该参数(我将称之为“步骤”)是否存在 - 如果存在,我们刷新页面。

让我们一起来看,首先我们必须将这个参数添加到创建的URL中 -

打开位于以下位置的item.php文件:

Yoursite-&GT;根据管理员&GT;组件 - &GT; com_k2-&GT;模型 - &GT; item.php

在646行或其附近 - 你会看到一些类似的文字:

case 'save':
default:
$msg = JText::_('Item Saved');
if ($front)
$link = 'index.php?option=com_k2&view=item&task=edit&cid='.$row->id.'&tmpl=component';
else
$link = 'index.php?option=com_k2&view=items';
break;

所以我们需要做的是将我们的参数添加到该URL,所以它看起来像这样(记得我调用参数'step',并将它设置为1) - 代码现在看起来像这样: / p>

if ($front)
$link = 'index.php?option=com_k2&view=item&task=edit&cid='.$row->id.'&step=1&tmpl=component';

现在,当用户点击“保存”时,参数“步骤”将被传递,当表单重新加载以向用户显示他们输入的信息时,步骤= 1!

那么我们必须添加php来检查 - 这很简单:

打开位于以下位置的form.php文件:

Yoursite-&GT;组件 - &GT; com_k2-&GT;&则须─GT;本期特价货品&GT; tmpl-&GT; form.php的

在那里,您可以看到表单实际开始的位置(在第249行或附近),我们想要做的只是添加一点php来检查我们的'step'参数是否等于1。它是 - 我们将使用一些javascript刷新父页面,它会自动关闭模型框并导致'item saved'文本显示给用户,让他们知道发生了什么。

现有代码如下:

<form action="index.php" enctype="multipart/form-data" method="post" name="adminForm" id="adminForm">


<div class="k2Frontend">

<table class="toolbar" cellpadding="2" cellspacing="4">

完成后,它将如下所示:

<form action="index.php" enctype="multipart/form-data" method="post" name="adminForm" id="adminForm">


<div class="k2Frontend">
<?php if (JRequest::getInt('step')=='1') { ?>
        <script language="javascript">
        var XHRCheckin = new Ajax('index.php?option=com_k2&view=item&task=checkin&cid=<?php echo $this->row->id; ?>', {
            method: 'get'
        });
        dummy = $time() + $random(0, 100);
        XHRCheckin.request("t"+dummy);
        parent.$('sbox-window').close();
        window.parent.location.reload();

        </script>
        <?php    } ?>

<table class="toolbar" cellpadding="2" cellspacing="4">

检查'step'是否= 1。如果是 - 它运行javascript来刷新父窗口 - 关闭框并自动刷新页面。它还检查后端的文章。

这确保了用户最简单的事情(即他们不必点击'后退'和'刷新',这非常违反直觉)并为前端用户提供后端体验。

我希望这对人们有所帮助 - 在我想到这个解决方案之前,我花了很多时间向错误的方向追逐。

我很开心,开发人员从来没有帮助过那些影响了这么多人的事情,但是很好 - 问题解决了!

答案 1 :(得分:0)

尝试window.location.reload

你也想摆脱“回归虚假”;来自你的onclick处理程序。这可能会阻止页面刷新。通常,在事件处理函数中放置任何“return”语句。

答案 2 :(得分:0)

我认为你正在寻找

   parent.location.reload();

顺便说一句,你实际上并不需要关闭iframe - 一旦你重新加载父页面,它就会消失。

答案 3 :(得分:0)

查看jQuery fancyBox

  

fancyBox是一种工具,它为您的网页上的图像,html内容和多媒体添加缩放功能提供了一种漂亮而优雅的方式。它构建在流行的JavaScript框架jQuery的顶部,并且易于实现和快速定制。

它有一个“ Reload page after closing ”,功能。

$(".fancybox").fancybox({
    afterClose : function() {
        location.reload();
        return;
    }
});