Wicket ModalWindow:单击外部模态以关闭

问题描述

| 我需要向“ 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设置,则可能不是这种情况。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...