如何同步Ajax onClick和onUpdate事件

如何同步Ajax onClick和onUpdate事件,ajax,checkbox,wicket,Ajax,Checkbox,Wicket,我有一个表来显示所选用户的权限。在列中我有角色,在行中我有函数。在表中的每个单元格中,我都有一个Wicket AjaxCheckBox,它使用onUpdate事件触发一个操作。但除此之外,管理员还应该能够单击该行以选中复选框。因此,每个单元格都附加了onClick事件 如果我点击复选框,它不会选择,但如果我双击它会选择。由于我只需单击一下单元格的onClick和复选框的onUpdate就可以同时触发,所以它会使自己处于中立状态 我正在运行Wicket 6.20 现在我是这样运行的: final

我有一个表来显示所选用户的权限。在列中我有角色,在行中我有函数。在表中的每个单元格中,我都有一个Wicket AjaxCheckBox,它使用onUpdate事件触发一个操作。但除此之外,管理员还应该能够单击该行以选中复选框。因此,每个单元格都附加了onClick事件

如果我点击复选框,它不会选择,但如果我双击它会选择。由于我只需单击一下单元格的onClick和复选框的onUpdate就可以同时触发,所以它会使自己处于中立状态

我正在运行Wicket 6.20

现在我是这样运行的:

final WebMarkupContainer cell = new WebMarkupContainer("cont");
cell.setOutputMarkupId(true);
cell.setOutputMarkupPlaceholderTag(true);
cell.setVisibilityAllowed(true);
cell.add(AttributeModifier.append("class", checkState));

cell.add(new AjaxEventBehavior("onclick") {
    private static final long serialVersionUID = 1L;
        @Override
        protected void onEvent(AjaxRequestTarget target) {
            eventHandler(checked, checkState);
            target.add(cell);
        }
});

item.add(cell);
cell.add(new AjaxCheckBox("checkbox", checked) {
    private static final long serialVersionUID = 1L;
    @Override
    protected void onUpdate(AjaxRequestTarget target) {
        eventHandler(checked, checkState);
        target.add(cell);
}});

public void eventHandler(IModel<Boolean> checked, IModel<String> checkState) {
    boolean isChecked = checked.getObject();
    if (isChecked == false) {
        checked.setObject(true);
        checkState.setObject("checked");
        //Do sth
    } else if (isChecked == true) {
        checked.setObject(false);
        checkState.setObject("unchecked");
        //Do sth
    }
}
最终WebMarkupContainer单元格=新的WebMarkupContainer(“cont”);
cell.setOutputMarkupId(true);
cell.setOutputMarkupPlaceholderTag(true);
cell.setVisibilityAllowed(true);
add(AttributeModifier.append(“class”,checkState));
添加(新的AjaxEventBehavior(“onclick”){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void onEvent(AjaxRequestTarget目标){
eventHandler(选中,检查状态);
目标。添加(单元格);
}
});
项目.添加(单元格);
添加(新的AjaxCheckBox(“复选框”),选中){
私有静态最终长serialVersionUID=1L;
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
eventHandler(选中,检查状态);
目标。添加(单元格);
}});
public void eventHandler(IModel已选中,IModel checkState){
布尔值isChecked=checked.getObject();
如果(isChecked==false){
选中。setObject(true);
checkState.setObject(“checked”);
//做某事
}else if(isChecked==true){
选中。setObject(false);
checkState.setObject(“未选中”);
//做某事
}
}

这是Wicket 7吗?然后,您应该防止AjaxCheckBox上的事件冒泡:

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
{
    super.updateAjaxAttributes(attributes);

    attributes.setEventPropagation(EventPropagation.STOP);
}

这是7号门吗?然后,您应该防止AjaxCheckBox上的事件冒泡:

@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes)
{
    super.updateAjaxAttributes(attributes);

    attributes.setEventPropagation(EventPropagation.STOP);
}

它仍然是Wicket 6.20,但我将检查此工作迁移6->7是否非常平滑,比1.5->6好得多。它仍然是Wicket 6.20,但我将检查此工作迁移6->7是否非常平滑,比1.5->6好得多