如何同步Ajax onClick和onUpdate事件

时间:2015-09-15 08:30:21

标签: ajax checkbox wicket

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

如果我单击CheckBox,它将不会选择,但如果我双击它。因为我只需单击一下单元格的onClick和CheckBox的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
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

    attributes.setEventPropagation(EventPropagation.STOP);
}