问题描述
|
我需要向“ 0”添加一个行为,以便当用户在模态之外单击时,如果满足特定条件(在我的“ 1”方法中选中了服务器端),则该模态将被关闭。
我尝试根据此答案实施一些措施。问题是我无法将单击侦听器附加到模式窗口div,因为在显示模式之前,它不会被添加到DOM中(示例将ѭ2附加到文档本身)。
我曾想过扩展
ModalWindow
并通过getShowJavascript()
添加JS,但是我没有任何办法将其连接到AbstractDefaultAjaxBehavior.respond()
方法进行测试。
解决方法
我通过不将行为添加到模态中,而是通过ѭ6to添加到模态中的小部件来解决了这一问题。将我的窗口小部件添加到模式中后,DOM中便出现了mask div,然后我可以成功地附加一个单击处理程序。
以机智:
public static class CloseModalOnOutsideClickBehavior extends AbstractDefaultAjaxBehavior
{
private final ModalWindow modal;
public CloseModalOnOutsideClickBehavior(ModalWindow modal)
{
this.modal = modal;
}
@Override
protected void respond(AjaxRequestTarget target)
{
if (myConditionIsMet()) modal.close(target);
}
@Override
public void renderHead(IHeaderResponse response)
{
response.renderJavascriptReference(\"http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js\");
response.renderJavascript(\"\" +
\"$(document).ready(function() {\\n\" +
\" $(\'div.wicket-mask-dark\').bind(\'click\',function(evt) {\\n\" +
getCallbackScript() + \"\\n\" +
\" evt.preventDefault();\\n\" +
\" });\\n\" +
\"});\",\"closeModal\");
}
}
请注意,我有点不稳定地依赖于模态窗口的蒙版,该蒙版的类名为“ wicket-mask-dark”。如果您更改ModalWindow
使用的CSS设置,则可能不是这种情况。