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