2013-12-20 35 views
1

我使用AjaxFormComponentUpdatingBehavior在從AutoCompleteTextField中選擇選項時執行某些操作。在完成這些工作之後,我想清除這個字段,但這並不像我預期的那樣工作。如何在選擇選項後清除檢票器AutoCompleteTextField?

我這裏還有代碼的相關位:

final AutoCompleteTextField<String> searchField = 
    new AutoCompleteTextField<String>(id, model); 

searchField.add(new AjaxFormComponentUpdatingBehavior("onchange") 
{   
    @Override 
    protected void onUpdate(AjaxRequestTarget target) 
    { 
     // Do stuff with the selected value here 
     ... 
     searchField.clearInput(); 
     target.addComponent(searchField); 

    }            
}); 

我把在ListView價值,並補充說,該目標也。它得到正確更新,但AutoCompleteTextField不。

+1

您是否也清除了searchField的模型值? clearInput()只會清除臨時提交的值。 – svenmeier

+2

除了這個問題,我建議使用'OnChangeAjaxBehavior':http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/ajax/form/OnChangeAjaxBehavior.html –

回答

2

我認爲你的例子不起作用,因爲你在客戶端使用服務器端的模型重新渲染組件。如果您重置模型值並重繪它必須工作的組件。

 searchField.setModelObject(null); 
     target.addComponent(searchField); 

然而,它並不是必須渲染整個組件,只需清除服務器和客戶端上的值就足夠了。

以下示例清除模型對象並通過javascript(jQuery)重置字段值。

final AutoCompleteTextField<String> searchField = 
    new AutoCompleteTextField<String>(id, model); 
searchField.setOutputMarkupId(true); 
searchField.add(new AjaxFormComponentUpdatingBehavior("onchange") 
{   
    @Override 
    protected void onUpdate(AjaxRequestTarget target) 
    { 
     // Do stuff with the selected value here 
     ... 
     searchField.clearInput(); 
     searchField.setModelObject(null); 
     target.appendJavascript("$('#" + searchField.getMarkupId() + "').val('');"); 

    }            
}); 

如果您在6.x之前使用Wicket,那麼不包括jQuery。您可以使用以下JS:

 target.appendJavascript("document.getElementById('" + searchField.getMarkupId() + "').value = '';"); 
相關問題