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 添加到“DIV”、“A”等 HTML 元素上。
但是'onbeforeunload'事件实际上是另一种情况,因为它是window定义的事件,所以它是'window.onbeforeunload'。
最简单的方法之一是创建一个 HTML 元素并在其中添加一个自定义事件。然后将 javascript 添加到页面的 head 部分,将先前定义的事件的触发器添加到 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
}
})
);
关于javascript - 带有 apache wicket 的 onbeforeunload 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20238886/