javascript-Wicket 1.5自动完成文本字段onUpdate行为未调用

我的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

上一篇:java-为什么数字约束在LWUIT中的虚拟键盘上不起作用?


下一篇:MacOS 和iOS 开发细节上的不同(OC)