2013-07-11 11 views
1

我創建的表單中只有在選中某個複選框時才能啓用某些文本字段。無需往返服務器即可動態啓用/禁用表單組件

我是相當新的檢票口,和我很好奇如下:

  1. 我可以啓用/禁用場沒有(AJAX)使用現有的檢票班往返服務器?即是否有可能向域中添加行爲,導致呈現的HTML包含啓用/禁用字段的JavaScript?

  2. 如果對上述問題的回答是:我自己在標記中添加必需的JavaScript代碼是否「合法」?或者,我是否冒着搞亂表單提交的風險,使Wicket沒有正確識別它?

我是新來的Wicket,我不確定這裏最好的做法是什麼。也許Wicket的做法總是涉及到AJAX往返?

回答

2

我可以啓用/禁用不使用現有Wicket類的(AJAX)往返 服務器的域(AJAX)嗎?即是否可以將 行爲添加到導致呈現的HTML包含的字段中 啓用/禁用字段的JavaScript?

是的,你可以沒有服務器往返。如果不是Wicket提供的課程,你將不得不自己創建。以下是您可以添加到組件的行爲。

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不能正確識別 ?

那麼,上述問題的答案不是「否」,但它仍然是完全合法的將自己的JavaScript添加到Wicket html文件。但是,您必須在HTML中定義組件的ID。不過,我更喜歡行爲解決方案,因爲它更具可重用性。

+0

美麗。謝謝! – aioobe

0

這絕對是可行的,而無需調用服務器。一些非常基本的客戶端Javascript/jQuery會做你想做的。看看here並用你的複選框替代下拉菜單。

相關問題