Wicket AjaxLink删除了onclick监听器

时间:2017-06-05 11:29:48

标签: javascript java jquery ajax wicket

在我们的项目中,我们有一个AjaxLink:

<a title="some title.." wicket:id="addMessage">Add</a>

Incide Page.class:

add(new AjaxLink() {
    @Override
    public void onClick(final AjaxRequestTarget target) {
        //...
    }
    @Override 
    protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
        attributes.getAjaxCallListeners().add(new AjaxCallListener() {
            @Override 
            public CharSequence getPrecondition(Component component) {
                return "return isPropagationAllowed()";
            }
        });
    }
}

(使用方法AjaxCallListener添加getPrecondition()会阻止onclick()方法在某些条件下执行(它应该从您的js返回一个返回布尔值的函数名称))

然后我通过js(+ JQuery)为该html元素定义一个监听器,并对其进行一些处理:

$('[title]').each((i, elem) => elem.onclick = (event) => {
    /* ..manually open a tooltip.... */
})

在AjaxLink执行之前,它按预期工作。然后我的onclick听众因某种原因消失了,然后为了使它工作我应该手动绑定它。

你知道为什么会发生这种情况(其他听众的擦除)以及如何防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

我认为原因是由于服务器端的某些target.add(ajaxLinkOrParent)调用,链接已在DOM中重新创建。将删除具有onclick属性的旧版本,并创建一个新属性。

你应该使用jQuery“live”绑定,例如$(document).on('click', '[title]', function(evt) {showTooltip();})