【问题标题】:How to filter a list based on an input field?如何根据输入字段过滤列表?
【发布时间】:2011-08-30 12:24:02
【问题描述】:

我有一个带有基本搜索栏的 JSF 2.0 应用程序,其中包含在 keyup 上更新的联系人列表,以便仅显示与搜索栏中的文本匹配的值。

<h:panelGroup id="contacts_tab_contacts_list">
    <h:form id="search_bar_form">
        <h:panelGroup id="contacts_tab_search_bar">
            <h:inputText id="search_bar_text"/>
        </h:panelGroup>
    </h:form>
    <c:forEach items="#{currentDevice.contacts}" var="contact">
        <li>
            <h:panelGroup id="contact_#{contact.phoneNumber}">
                <h:outputText value="#{contact.phoneNumber}" />
            </h:panelGroup>
        </li>
    </c:forEach>
</h:panelGroup>

我希望它很快,所以我想用 JavaScript/jQuery 来实现它。 我是 JavaScript/jQuery 世界的新手,所以我需要一些帮助。 我怎么能这样做?

【问题讨论】:

  • 谢谢@JohnP,我想看看我是否能弄清楚如何在我的项目中实现它(因为自动完成是一个很好的功能,但它并不是我所需要的)
  • 你能说得更具体些吗?当你说你想要一个客户端解决方案时,这是否意味着页面中已经下载了数据(联系人),你只需要正则表达式搜索它们,还是你的意思是使用 ajax 来解决问题?
  • 如您所说,列表将被下载到客户端并使用 Ajax 使用搜索栏进行过滤。

标签: javascript jquery html jsf-2


【解决方案1】:

如下更新视图(添加&lt;ul&gt;,使用&lt;ui:repeat&gt;而不是&lt;c:forEach&gt;,删除了一些不必要的&lt;h:panelGroup&gt;s 以尽量减少噪音,&lt;h:form&gt; 也不是必需的,因为没有什么需要提交到服务器端)

<input id="search" />
<ul id="contacts">
    <ui:repeat value="#{currentDevice.contacts}" var="contact">
        <li>#{contact.phoneNumber}</li>
    </ui:repeat>
</ul>

并使用此脚本过滤列表:

$('#search').keyup(function() {
    var $search = $(this).val();
    $('#contacts li').each(function() {
        var $li = $(this);
        if ($li.text().indexOf($search) > -1) {
            $li.show();
        } else {
            $li.hide();
        }
    });
});

【讨论】:

    【解决方案2】:

    为什么要重新发明轮子RichFaces already provide this

    【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多