【问题标题】:Wicket 1.5 Autocomplete Textfield onUpdate Behavior not called未调用 Wicket 1.5 自动完成文本字段 onUpdate 行为
【发布时间】:2011-11-08 08:37:51
【问题描述】:

我的 AutoCompleteTextField(getChoices 方法已实现且有效):

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

我在这个文本字段中添加:

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

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

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

【问题讨论】:

    标签: javascript autocomplete wicket textfield


    【解决方案1】:

    添加AjaxFormComponentUpdatingBehavior("onchange")

    OnChangeAjaxbehavior() 似乎在每次更改时都会触发(使用 Javascript Wicket.ChangeHandler),就像在每次按键时一样。

    使用AjaxFormComponentUpdatingBehavior 会将事件侦听器添加到onChange javascript 事件中,例如在具有不同值的文本字段之外聚焦,或者从自动完成列表中选择一个值。

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

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

    • 备份onchangeoriginal 中的onchange 事件处理程序:
    obj.onchangeoriginal = obj.onchange
    • 如果浏览器是 IE、Safari 等,它会将原始的 onchange 事件处理程序分配给 onKeyUponpasteoncut
    • 如果不是,它会将原始的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

    【讨论】:

    • 谢谢,现在可以使用了!不知道这种行为背后的逻辑,对我来说似乎是一个错误......
    • 我也发现了这个问题...应该已经通过此更改修复:obj.onchangeoriginal = obj.onchange; 但仍然无法按预期工作。
    • 是的...看来他们应该首先在wicket-autocomplete.js 中检查obj.onchangeoriginal
    • 我已经提交了关于这个问题的问题:WICKET-4204
    • 我不知道这是否与这个问题有关,但AjaxIndicator-Image 也没有被调用...
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多