我的AutoCompleteTextField(已实现并正常运行getChoices方法):
AutoCompleteTextField<String> objectDescription = new AutoCompleteTextField<String>("objectDescription") {
getChoices() {...}
}
我在此文本字段中添加:
objectDescription.add(new OnChangeAjaxBehavior()) {
onUpdate() {....}
}
每次我在文本字段中写入内容时都会调用onUpdate方法,但是当我从自动完成菜单中选择某些项目时不会调用.菜单中的字符串将写入文本字段,但仅在进行其他更改时才调用onUpdate.
编辑:在Wicket 1.5之前,这是可行的.
解决方法:
添加一个AjaxFormComponentUpdatingBehavior(“ onchange”).
就像每次按键一样,OnChangeAjaxbehavior()似乎在每次更改时都会触发(使用Javascript Wicket.ChangeHandler).
使用AjaxFormComponentUpdatingBehavior会将事件侦听器添加到onChange javascript事件中,例如将焦点放在具有不同值的文本字段之外,或者从自动完成列表中选择一个值.
仍然不确定OnChangeAjaxbehavior为什么不扩展AjaxFormComponentUpdatingBehavior从AjaxFormComponentUpdatingBehavior继承此逻辑,因此必须覆盖某些内容.
更新这很可能是使用OnChangeAjaxBehavior时会忽略onchange javascript事件的原因.在wicket-ajax.js中找到的Wicket.ChangeHandler的源代码设置了不同事件的处理程序:
>在onchangeoriginal中备份onchange事件处理程序:
obj.onchangeoriginal = obj.onchange
>如果浏览器是IE,Safari和其他浏览器,则它将原始onchange事件处理程序分配给onKeyUp,onpaste和oncut.
>否则,它将原始onchange事件处理程序分配给onInput.
>最后,它总是删除onchange事件处理程序:
obj.onchange = function(event){
Wicket.stopEvent(event);
}
wicket-autocomplete.js中的代码似乎是在选择项目时手动触发了onchange事件处理程序.可能应该先检查obj.onchangeoriginal.
因此,在OnDomReady中执行此js时,我怀疑是否可以使这两种行为共存.也许是时候提交新的JIRA了?
这可能是一个稍微相关的问题:WICKET-2424: OnChangeAjaxBehavior + DatePicker do not work together