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>