如何在不关闭厚箱的情况下从厚箱中触发事件?

时间:2011-09-26 06:15:20

标签: javascript jquery asp.net jquery-ui thickbox

我正在使用thickbox,我需要使用asp控件,并且还必须调用相应控件的事件。最近我遇到了一个问题,在厚箱中使用时,asp控件的事件不会被触发。以下是关于我的问题的逐步程序:

  1. 我需要从厚箱中触发asp按钮点击事件而不关闭厚箱。

  2. 为了解决#1,我使用了以下脚本:

      function doPostBack(element) {
        tb_remove();
        setTimeout('__doPostBack(\'' + element.name + '\',\'\')', 500);
    }
    
  3. #2触发事件并关闭thickbox窗口。我需要在厚箱窗口上显示标签,关闭窗口使其无法实现。
  4. 我尝试使用tb_show()方法显示thicbox但是在使用firebug进行调试时将显示该窗口,然后关闭按钮将不起作用。 任何建议都会有所帮助......

1 个答案:

答案 0 :(得分:0)

首先,有关您原始解决方法必要性的一些信息。

大多数这些模态对话框插件(如Thickbox)会将包含对话框内容的div从DOM中的原始位置拉出,然后在body标记下再次附加它。这主要与获取弹出窗口后面的叠加层以正确显示有关。

这样做的一个副作用,特别是在一个只包含一个表单标记的ASP.NET页面中,表单控件不再位于<form>标记内。因此,当您单击按钮提交表单时,没有任何反应(因为它不在可以提交的表单中)。

您在上面找到的解决方法,这是最简单的解决方案,首先关闭Thickbox,以便您的表单内容现在回到DOM中<form>标记内的原始位置。然后它启动表单的提交。在尝试提交之前,它使用超时来确保对话框有机会正确关闭。

如果您希望Thickbox对话框在回发期间保持打开状态,则必须处理上述实际问题。一种方法是,不是真的做回发,而是使用AJAX用表单字段中的值调用webservice /方法。另一种选择是modify the thickbox.js to keep everything inside the form tag。第三个选项是将另一个页面与您的表单放在一起,然后将其加载到iframe中的Thickbox中。

无论解决方案是什么,它都会涉及将对话框内容保留在DOM中的表单标记内,或者使用另一种方式发布表单数据,以便它不在表单之外。

希望这可以帮助您找到适合您具体情况的解决方案。


关于在没有标准链接标记的情况下打开thickbox的原始问题的原始答案

您是否尝试过以下操作?

tb_show('Title for thickbox','WHATEVER-YOU-WOULD-NORMALLY-PUT-IN-THE-HREF');

我不使用Thickbox,但这是您在单击链接时在内部使用的功能。