javascript - 带有 apache wicket 的 onbeforeunload 事件

标签 javascript event-handling dom-events wicket

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/

相关文章:

JavaScript 在目标按钮上显示更多内容

javascript - 返回事件函数导致弹出警报

javascript - 创建事件处理程序时从不同元素获取值

javascript - 如何在运行密集的 JavaScript 时更新 DOM?

javascript - 点击函数内的提交函数

javascript - 如何编写可测试的 requirejs 模块

javascript - 使用异步 ajax 调用构建对象

javascript - 如何获得嵌套的 ng-if 触发?

javascript - 什么是 "event emitter"?

javascript - 选择列表框中的元素时如何触发动画