我正在使用thickbox,我需要使用asp控件,并且还必须调用相应控件的事件。最近我遇到了一个问题,在厚箱中使用时,asp控件的事件不会被触发。以下是关于我的问题的逐步程序:
我需要从厚箱中触发asp按钮点击事件而不关闭厚箱。
为了解决#1,我使用了以下脚本:
function doPostBack(element) {
tb_remove();
setTimeout('__doPostBack(\'' + element.name + '\',\'\')', 500);
}
我尝试使用tb_show()方法显示thicbox但是在使用firebug进行调试时将显示该窗口,然后关闭按钮将不起作用。 任何建议都会有所帮助......
答案 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,但这是您在单击链接时在内部使用的功能。