在我们的项目中,我们有一个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听众因某种原因消失了,然后为了使它工作我应该手动绑定它。
你知道为什么会发生这种情况(其他听众的擦除)以及如何防止这种情况发生?
答案 0 :(得分:1)
我认为原因是由于服务器端的某些target.add(ajaxLinkOrParent)
调用,链接已在DOM中重新创建。将删除具有onclick
属性的旧版本,并创建一个新属性。
你应该使用jQuery“live”绑定,例如$(document).on('click', '[title]', function(evt) {showTooltip();})