2013-12-20 2 views
1

Я использую AjaxFormComponentUpdatingBehavior, чтобы сделать некоторые вещи, когда выбор выбран из AutoCompleteTextField. После этого дела я хочу очистить поле, но он не ведет себя так, как я ожидал.Как очистить калитку AutoCompleteTextField после выбора?

Here're соответствующие биты кода:

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

Вы также очищаете значение модели Field? 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('');"); 

    }            
}); 

Если вы используете Wicket до 6.x, тогда jQuery не включен. Вы можете использовать следующие JS:

 target.appendJavascript("document.getElementById('" + searchField.getMarkupId() + "').value = '';"); 
Смежные вопросы