モーダルではなく、モーダルに追加するウィジェットに動作を追加することでこれを解決しましたModalWindow.setContent()
。ウィジェットがモーダルに追加されると、マスク div が DOM に存在し、クリック ハンドラーを正常にアタッチできます。
ウィット:
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」という名前のクラスを持つモーダル ウィンドウのマスクに多少不安定に依存していることに注意してください。で使用される CSS 設定を変更すると、これが当てはまらない場合がありますModalWindow
。