我解決了這個問題,通過添加行爲不是模式,而是通過ModalWindow.setContent()
添加到模式的小部件。當我的小部件被添加到模式中時,mask div存在於DOM中,然後我可以成功連接一個click處理程序。
機智:
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");
}
}
請注意,我有點搖搖欲墜取決於有一個名爲「檢票面罩黑暗」類的模態窗口的面具;如果您更改ModalWindow
使用的CSS設置,則情況可能不是這種情況。