如何在调用jquery colorbox时回发页面?

时间:2012-07-19 15:04:00

标签: jquery asp.net jquery-plugins postback colorbox

我在我的一个应用程序中调用了jquery颜色框。我可以打开它,但我希望我的页面首先回发,同时打开颜色框。我试过下面的代码。

ASPX:

<script type="text/javascript">
        function OpenColorBox() {
            $.colorbox({
                opacity: 0.1,
                width: '350px',
                height: '350px',
                iframe: true,
                href: '/MMP/MMPhome.aspx',
                onLoad: function () {

                    $('#cboxClose').remove();
                },
                onClosed: function () {

                }
            });
        }

    </script>

<asp:Button ID="Call" runat="server" Text="Save this Search Criteria" 
                    OnClientClick="OpenColorBox(); return false;" onclick="Call_Click" />

它是打开弹出窗口,但我想先回复我的页面。 如果有人知道,请帮助我。

2 个答案:

答案 0 :(得分:1)

如果您需要回发,那么打开ColorBox,您可以执行以下操作:

ASCX:

<asp:Button ID="Call" runat="server" Text="Save this Search Criteria" 
                    onclick="Call_Click" />

代码隐藏:

private void Call_Click(object sender, EventArgs e)
{
   Page.ClientScript.RegisterClientStartupScript(this.GetType(), "OpenColorBoxAfterClick", "OpenColorBox();", true);
   //Handle the rest of your code
}

如果在打开ColorBox时需要回发,则需要使用Ajax。包含该按钮的UpdatePanel可以解决这个问题:

ASCX:

Codebeind:

private void Call_Click(object sender, EventArgs e)
{
   //Handle click as normal
}

如果您需要使用UpdatePanel,但在updatepanel返回后仍然调用javascript:

ASCX:

<asp:Button ID="Call" runat="server" Text="Save this Search Criteria" 
                    onclick="Call_Click" />

代码隐藏

private void Call_Click(object sender, EventArgs e)
{
   ScriptManager.RegisterStartupScript(this, this.GetType(), "OpenColorBoxAfterClick", "OpenColorBox();", true);
   //Handle click as normal
} 

答案 1 :(得分:1)

您无法调用按钮单击事件,因为颜色框会在页面上的表单外部呈现向用户显示的div。要解决这个问题,你必须对插件进行一些小改动。

在colorbox插件中查找appendHTML()函数并替换以下行:

if (!$box && document.body)

使用:

if (!$box && document.forms[0])

在方法的最后一行,替换:

$(document.body).append($overlay, $box.append($wrap, $loadingBay));

$(document.forms[0]).append($overlay, $box.append($wrap, $loadingBay));

这解决了问题,因为现在你将在form标签!!中提供colorbox渲染div。