【问题标题】:Filtering List as you type jquery jsp键入 jquery jsp 时过滤列表
【发布时间】:2019-01-28 14:46:40
【问题描述】:

我的问题是:

我有一个 jsp、java 和 jquery 中的人员列表,我有 2 个输入姓名和年龄,我想用它们来过滤带有按键事件的列表。

Classes:
Person{ 
 Id id; 
 string age; 
 string others;
 getters and setters
}

Id{
 string name;
 string surname;
 getters and setters
}

我想从 id 中获取 jquery 值:

JAVA:
List<Person> list_of_persons; //It has some persons in it
map.put("list", list_of_persons);

HTML:
<% int i = 0; %>
<input type="text" id="filter_name"/>
<input type="text" id="filter_age"/>
<c:forEach items="${map.list}" var="listPerson" id="list_of_persons">
<% i++; %>
<div class="row reg_<%=i%>">

<div class = "col-md-2">
<input type="text" class="form-control" id="person_name_<%=i%>" 
value="<c:out value="${listPerson.getId().getName()}"/>"/>
</div>
<div class = "col-md-2">
<input type="text" class="form-control" id="person_age_<%=i%>" 
value="<c:out value="${listPerson.getAge()}"/>"/>
</div>
<div class = "col-md-2"><input type="text" class="form-control" 
id="person_others_<%=i%>" 
value="<c:out value="${listPerson.getOthers()}"/>"/>
</div>
</foreach>
</div>

jquery:

namekeyupevent(){
  //want to filter the list with the name on keyup

  //Should i compare input name with each object of the list?
  // if so how can i get the name from the list?
  // Something like this would be ok?

   $('.list_of_persons).each(function(){
     var text = $(this).id.name;
}

agekeyupevent(){
  //want to filter the list with the age on keyup
}

感谢您的帮助。

您好。

【问题讨论】:

    标签: javascript jquery ajax jsp filtering


    【解决方案1】:

    您可以为每个输入类型(例如年龄、姓名)添加类,并将每个迭代放在 div 中,以便可以识别每一行。

    HTML:

    <input type="text" id="filter_name"/>
    <input type="text" id="filter_age"/>
    <c:forEach items="${map.list}" var="listPerson" id="list_of_persons">
    <div class="record">
    <input type="text" class="name form-control" id="person.id" value="<c:out 
           value="${listPerson.getId().getName()}"/>">
    <input type="text" class="age form-control" id="person.age" value="<c:out 
           value="${listPerson.getAge()}"/>">
    <input type="text" class="other form-control" id="person.others" value="<c:out 
           value="${listPerson.getOthers()}"/>">
    </div>
    </foreach>
    

    jQuery:为过滤器绑定 keyup 事件处理程序并检查年龄或名称是否包含值,然后显示记录accordinlgy

    $(function(){
      $('#filter_name').on('keyup', function(){
          var value = $(this).val();
          $('div.record').hide();//hide all record
          $('div.record').filter(function(){
              return $(this).find('name').val().indexOf(value) !=-1;
          }).show();
      });
    
      $('#filter_age').on('keyup', function(){
          var value = $(this).val();
          $('div.record').hide();//hide all record
          $('div.record').filter(function(){
              return $(this).find('age').val().indexOf(value) !=-1;
          }).show();
      });
    });
    

    【讨论】:

    • 看起来不错,但我在 HTML 中有 java 包含,在里面 我有 增加列表的位置,因此 html 正在逐个绘制列表对象。我该如何应用您的解决方案?
    • 我知道您正在使用带有 jstl 标签的 java,您只需要在每行的三个输入周围再包装一个 div,以便我可以识别该行。或者您可以修改您的 html 并将三个输入放在表格行中。
    • 好吧,我写的不对,在我的代码中,for each 中的每个输入都在引导程序的
      中。这可能是 div.record 没有正确过滤的问题吗?此时我可以获取值并从列表中隐藏所有对象。实现在过滤器上显示正确的匹配是唯一剩下要做的事情。
    • 如果您可以共享从浏览器视图源生成的 html,这可能有助于查看您的问题
    • 成功了!谢谢,问题出在输入“类”值上,我有 class="form-control" 而不是 class="name form-control" 也有错误,使用 .text() 返回 "" 使用 .val( ) 从输入中获取正确的值,现在一切正常。感谢您的帮助。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签