【问题标题】:Autocomplete with restriction有限制的自动完成
【发布时间】:2017-09-05 19:48:00
【问题描述】:

我正在尝试使用引导程序执行一个自动完成功能,该功能仅在相关的 inputText 包含超过 4 个字符时才必须显示选项列表。 这是我的 xhtml:

<script>
    $(function(){
      jQuery.noConflict();

      var autocompPerson = $('.autocomp'); 

      autocompPerson.typeahead({

      source: [#{operationsFormBean.allPersonFilteredList}],

      });
    });
</script>

<div class="col-md-8 pb0 pl0">
        <h:inputText id="auPerson"
            value="#{backingBeanRef['selectedPersonName']}"
            styleClass="form-control autocomp wo-borders bg-transparent">
         <a4j:ajax 
          event="keyup" listener="#{backingBeanRef['personFilteredList']}"
          render="operations_form_panel"/>
       </h:inputText>

</div>

方法 personFilteredList() 在我的 java Bean 中,它控制输入是否超过 4 个字符。

如果我使用事件“keyup”,每当我在 inputText 中写入一个字符时,我都会失去对它的关注,并且列表会立即消失。我知道它正在工作,因为它仅在我写超过 4 个字符时才显示列表。问题是:当调用该方法时,我必须渲染 inputText 才能显示列表,这让我失去了焦点,导致列表消失。

你知道我是否可以使用像“updater”这样的 js 函数,它在我每次写东西时更新我的​​ selectedPersonName 而不使用事件 keyup?

提前致谢。

【问题讨论】:

  • PrimeFaces 包含 &lt;p:autoComplete&gt; 标签的内置自动完成功能。

标签: javascript twitter-bootstrap jsf autocomplete typeahead.js


【解决方案1】:

使用 AJAX oncomplete JS 回调挂钩来更新 typeahead 的源并仅重新呈现 inputText。请参阅此 post 以在引导程序预输入中重置源。

【讨论】:

  • 这几乎可以正常工作。问题是使用事件“keyup”并重新渲染 inputText,当我写一个字符时,它会显示列表并立即消失。我正在尝试使用类似的东西: $('.typeahead').show();但它不起作用。
  • 尝试将&lt;script&gt; 元素嵌套在&lt;h:panelGroup/&gt; 中,然后重新渲染它而不是&lt;h:inputText/&gt;。它应该会导致您的脚本执行而不会弄乱 inputText。如果可行,请告诉我,我会更新我的答案
  • 我已经尝试过了,但是列表没有出现,可能是因为没有渲染输入文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-02
  • 2016-03-22
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多