Javascript 动态启用/禁用表单组件而无需服务器往返

Javascript 动态启用/禁用表单组件而无需服务器往返,javascript,wicket,Javascript,Wicket,我正在创建一个表单,在该表单中,只有选中某个复选框时,才应启用某些文本字段 我是Wicket的新手,我对以下几点很好奇: 我是否可以使用现有Wicket类启用/禁用该字段,而无需(AJAX)往返服务器?即,是否可以向字段添加行为,从而导致呈现的HTML包含启用/禁用字段的JavaScript 如果以上问题的答案是否定的:我自己在标记中添加所需的JavaScript代码是否“合法”?或者我是否冒着弄乱表单提交的风险,以致Wicket无法正确识别它 我是Wicket的新手,我不确定这里的最佳实践是什

我正在创建一个表单,在该表单中,只有选中某个复选框时,才应启用某些文本字段

我是Wicket的新手,我对以下几点很好奇:

  • 我是否可以使用现有Wicket类启用/禁用该字段,而无需(AJAX)往返服务器?即,是否可以向字段添加行为,从而导致呈现的HTML包含启用/禁用字段的JavaScript

  • 如果以上问题的答案是否定的:我自己在标记中添加所需的JavaScript代码是否“合法”?或者我是否冒着弄乱表单提交的风险,以致Wicket无法正确识别它


  • 我是Wicket的新手,我不确定这里的最佳实践是什么。也许Wicket实现这一点的方法总是涉及AJAX往返?

    这在不调用服务器的情况下是绝对可行的。一些非常基本的客户端Javascript/jQuery可以满足您的需要。看一看,用复选框替换下拉列表

    我是否可以启用/禁用字段,而无需(AJAX)往返到 使用现有Wicket类的服务器?也就是说,是否可以添加 导致呈现的HTML包含的字段的行为 启用/禁用字段的JavaScript

    是的,不需要服务器往返就可以完成。不,不是Wicket提供的类,你必须自己创建。以下是可以添加到组件的行为。如果单击具有此行为的组件,则将通过javascript禁用传递到构造函数中的目标组件:

    public class DisableFormComponentBehavior extends Behavior {
    
    private Component sourceComponent;
    
    private FormComponent targetComponent;
    
    public DisableFormComponentBehavior(FormComponent targetComponent) {
        targetComponent.setOutputMarkupId(true);
        this.targetComponent = targetComponent;
    }
    
    public void bind(Component component) {
        super.bind(component);
        component.setOutputMarkupId(true);
        this.sourceComponent = component;
    }
    
    @Override
    public void renderHead(Component component, IHeaderResponse response) {
        super.renderHead(component, response);
        response.render(JavaScriptHeaderItem
                .forReference(JQueryResourceReference.get()));
        response.render(OnDomReadyHeaderItem.forScript(String
                .format("$('#%s').click(function(){$('#%s').prop('disabled', true);});",
                        component.getMarkupId(), targetComponent.getMarkupId())));
    }
    
    }
    
    如果上述问题的答案是否定的,那么我补充一句是否“合法” 标记中所需的JavaScript代码?还是由我来管理 可能会弄乱表单提交,导致表单无法正确提交 被威克特认出来了

    当然,上述问题的答案不是“不”,但将自己的javascript添加到Wicket html文件仍然是完全合法的。但是,您必须在HTML中定义组件的ID。不过,我更喜欢具有行为的解决方案,因为它更易于重用