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

rot*_*sch 3 javascript wicket autocomplete textfield

我的 AutoCompleteTextField(getChoices 方法实现并工作):

AutoCompleteTextField<String> objectDescription = new AutoCompleteTextField<String>("objectDescription") { 
     getChoices() {...}
}
Run Code Online (Sandbox Code Playgroud)

我添加到这个文本字段:

objectDescription.add(new OnChangeAjaxBehavior()) {
     onUpdate() {....}
}
Run Code Online (Sandbox Code Playgroud)

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

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

Xav*_*ica 5

添加一个AjaxFormComponentUpdatingBehavior("onchange").

OnChangeAjaxbehavior()在每一次改变(使用的JavaScript似乎火Wicket.ChangeHandler),像每一个按键。

使用 anAjaxFormComponentUpdatingBehavior会将事件侦听器添加到onChangejavascript 事件,例如将焦点移出具有不同值的文本字段,或从自动完成列表中选择一个值。

仍然不确定为什么不OnChangeAjaxbehavior extends AjaxFormComponentUpdatingBehavior从 继承这个逻辑AjaxFormComponentUpdatingBehavior,一定有什么东西被覆盖了。

更新这很可能是onchange使用 .js 时忽略 javascript 事件的原因OnChangeAjaxBehaviorWicket.ChangeHandler在 wicket-ajax.js 中找到的 的源代码为不同的事件设置处理程序:

  • 备份onchange事件处理程序onchangeoriginal
obj.onchangeoriginal = obj.onchange
Run Code Online (Sandbox Code Playgroud)
  • 如果浏览器是 IE、Safari 和其他一些浏览器,它会将原始onchange事件处理程序分配给onKeyUponpasteoncut
  • 如果不是,它将原始onchange事件处理程序分配给onInput
  • 最后,它总是删除onchange事件处理程序:

    obj.onchange = function(event){
        Wicket.stopEvent(event);
    }
    Run Code Online (Sandbox Code Playgroud)

中的代码wicket-autocomplete.js似乎是onchange在项目选择时手动触发事件处理程序。可能应该先检查一下obj.onchangeoriginal

因此,作为在 .js 中执行的这个 js OnDomReady,我怀疑是否有可能使这两种行为共存。也许是时候提交新的 JIRA 了?

这可能是一个稍微相关的问题:WICKET-2424: OnChangeAjaxBehavior + DatePicker do not work together