使用apachewicket的onbeforeunload事件



Apache Wicket中的JavaScript事件onbeforeunload有问题。

我想做的是:我有一个变量,它告诉我数据是否发生了变化。现在,我想打开JavaScript确认对话框(confirm("my text");),询问用户是否确定他正在丢失更改。只有当某些内容发生更改时,才会弹出此对话框。

有人知道这种行为是如何正确运作的吗?

我试过这个:

add(new AjaxEventBehavior("onbeforeunload") {
    @Override
    protected void onEvent(AjaxRequestTarget target) {
        target.prependJavaScript("confirm('my dialog');");
    }
});

它的作用:我现在有两个对话框。第一个是一个对话框;false";第二个是我真正的对话。

有人参加过这次活动吗?

Michael,我发现你的介词错了onbeforeunload是如何工作的,你在哪里AjaxEventBehavior。

AjaxEventBehavior为javascript事件添加侦听器。您可以使用一个众所周知的元素的事件,如"onclick"、"onchange"等。第二种方法是使用您自己的事件,例如"myevent",并从javascript触发它。这两种情况都意味着您将AjaxEventBehavior添加到HTML元素中,如"DIV"、"A"等。

然而,事件"onbeforeunload"实际上是另一种情况,因为它是由window定义的事件,所以它是"window.oneforunload"。

最简单的方法之一是创建一个HTML元素并在其中添加一个自定义事件。然后在页面的头部添加一个javascript,只需将先前定义的事件的触发器添加到onbeforeunload。

示例:

Wicket 1.6

标记

<div wicket:id="myElement">[just a placeholder tag]</div>

代码示例:

static String CUSTOM_EVENT_NAME = "myElementEvent";
add(new WebMarkupContainer("myElement") 
{
    private static final long serialVersionUID = 1L;
    @Override
    public void renderHead(IHeaderResponse response) 
    {
        super.renderHead(response);
        StringWriter sw = new StringWriter();
        sw.append("$(window).bind('onbeforeunload', function() { $('#");
        sw.append(getMakupId());
        sw.append("').trigger('");
        sw.append(CUSTOM_EVENT_NAME);
        sw.append("'); });");
        response.render(OnDomReadyHeaderItem.forScript(sw.toString()));
    }
}
.setOutputMarkupId(true)
.add(
    new AjaxEventBehavior(CUSTOM_EVENT_NAME) 
    {
        private static final long serialVersionUID = 1L;
        protected void onEvent(final AjaxRequestTarget target) 
        {
        // your code
        }
    })
);

使用wicket 1.3.7,我这样解决了它:

protected static final String EVENT_ON_UNLOAD = "onunload"; //Be shure eventname is lowercase only
body = new WebMarkupContainer("_body_")
{
    @Override
    public void renderHead(HtmlHeaderContainer container)
    {
        super.renderHead(container);
        StringWriter sw = new StringWriter();
        sw.append("window.addEventListener('beforeunload', function(e) { $('#");
        sw.append(body.getMarkupId());
        sw.append("').trigger('");
        sw.append(EVENT_ON_UNLOAD);
        sw.append("'); });");
        String javascript = sw.toString();
        IHeaderResponse response = container.getHeaderResponse();
        response.renderOnDomReadyJavascript(javascript);
    }
};
body.setOutputMarkupId(true);
body.add(new AjaxEventBehavior(EVENT_ON_UNLOAD)
{
    protected void onEvent(final AjaxRequestTarget target)
    {
        // your Code
    }
});
add(body);

我把它添加到了简化后的基本页面上,看起来像这个

<html>
  <head>
  ...
  </head>
  <body wicket:id="_body_">
    ...
  </body>
</html>

相关内容

  • 没有找到相关文章

最新更新