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

时间:2011-11-08 08:37:51

标签: javascript autocomplete wicket textfield

我的AutoCompleteTextField(实现并运行了getChoices方法):

AutoCompleteTextField<String> objectDescription = new AutoCompleteTextField<String>("objectDescription") { 
     getChoices() {...}
}

到这个文本域我添加:

objectDescription.add(new OnChangeAjaxBehavior()) {
     onUpdate() {....}
}

每次我在文本字段中写入内容时都会调用onUpdate方法,但是当我从自动完成菜单中选择某个项目时,则不会调用{{1}}方法。菜单中的字符串将写入文本字段,但仅在进行其他更改时调用onUpdate。

编辑:在Wicket 1.5之前,这是有效的。

1 个答案:

答案 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
  • 如果浏览器是IE,Safari和其他浏览器,则会将原始onKeyUp事件处理程序分配给onpasteoncutonchange
  • 如果没有,则会将原始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