使用JavaScript在DataList中搜索匹配项

时间:2016-04-26 16:20:27

标签: javascript c# html asp.net

首先,我在C#中工作,在ASP.NET中,我有一个带有员工的DataList,名称在Labels中,属于ItemTemplate。

然后我需要一个JavaSript函数来捕获用户输入的文本并将其与Label的文本进行比较。如果退出巧合显示Row,否则隐藏它。

<asp:DataList ID="dt_usuario" runat="server" CellPadding="4" OnItemCommand="dt_usuario_ItemCommand"
                    ForeColor="#333333" BorderColor="Black" BorderStyle="Dashed" BorderWidth="1px" ItemStyle-BorderColor="Gray" ItemStyle-BorderStyle="Dashed" ItemStyle-BorderWidth="1px">
                    <AlternatingItemStyle BackColor="White" />
                    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <ItemStyle BackColor="#EFF3FB" />
                        <ItemTemplate>
                            <table>
                                <tr>
                                    <td>
                                        <asp:Label ID="lblid" runat="server" Visible="false" Text='<%# DataBinder.Eval(Container.DataItem, "id_usuario" )%>'></asp:Label>
                                    </td>
                                    <td style="width:450px;" title="emploee">
                                        <asp:Label ID="lbl" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "nom_institucion") %>'></asp:Label>
                                    </td>
                                    <td>
                                        <asp:LinkButton ID="lkreport" runat="server" Text="Reporte" CommandName="Reporte" class="btn btn-7 btn-7ba icon-reporte"><span><center>Imprimir</center></span></asp:LinkButton>
                                    </td>
                                </tr>
                            </table>
                        </ItemTemplate>
                    </asp:DataList>

<asp:TextBox ID="txtSeach" Width="400px" onkeyup="javascript:Seach(this)" runat="server"></asp:TextBox>

我试图创建自己的功能,但没有工作

function Seach(phrase)
        {
            var palabra = phrase.value.toLowerCase().split(" ");
            var datalist = document.getElementById('<%=dt_usuario.ClientID%>');
            for (var i = 0; i < datalist.length; i++)
            {
                var usuario = datalist.rows[i].getElementById("lblUsuario").value;
                var institucion = datalist.rows[i].getElementById("lblInstitucion").value;
                if (usuario.match(/palabra.*/) || institucion.match(/palabra.*/))
                {
                    datalist.rows[i].visible = false;
                }
            }
            
        }
    </script>

我希望有人可以帮助我

2 个答案:

答案 0 :(得分:1)

以下是您可以对代码进行的一些调整:

  1. 由于表格行不支持getElementById方法,因此可以使用getElementsByClassName方法。可以将一个公共类名称提供给搜索所针对的标签,以便可以通过一次调用来检索它们。
  2. 标签呈现为span元素,其内容由innerHTML属性而不是value提供。
  3. display样式可用于显示/隐藏行,而不是visible属性(不存在)。
  4. 您在功能中引用ID为lblUsuariolblInstitucion的标签,但我不会在您的标记中看到它们。我假设你在问题中复制/粘贴你的代码时会丢失它们。
  5. DataList中标签的典型标记:

    <asp:Label ID="lblUsuario" runat="server" CssClass="fieldValue" Text='<%# DataBinder.Eval(Container.DataItem, "nom_usuario") %>' />
    <asp:Label ID="lblInstitucion" runat="server" CssClass="fieldValue" Text='<%# DataBinder.Eval(Container.DataItem, "nom_institucion") %>' />
    

    搜索功能:

    function Search(phrase) {
        var i, j, k;
        var fields, foundMatch;
        var palabra = phrase.value.toLowerCase().split(' ');
        var datalist = document.getElementById('<%= dt_usuario.ClientID %>');
        for (i = 0; i < datalist.rows.length; i++) {
            foundMatch = false;
            fields = datalist.rows[i].getElementsByClassName('fieldValue');
            for (j = 0; j < palabra.length; j++) {
                for (k = 0; k < fields.length; k++) {
                    if (fields[k].innerHTML.toLowerCase().indexOf(palabra[j]) >= 0) {
                        foundMatch = true;
                        break;
                    }
                }
            }
            datalist.rows[i].style.display = foundMatch ? '' : 'none';
        }
    }
    

答案 1 :(得分:0)

我认为这就是你所追求的。您可以使用RegEx.IsMatch(input, pattern)

首先,添加using System.Text.RegularExpressions;

然后:

function Seach(phrase)
    {
        var word = phrase.value.toLowerCase().split(" ");
        var datalist = document.getElementById('<%=dt_employee.ClientID%>');
        for (var i = 0; i < datalist.length; i++)
        {
            var empl = datalist.rows[i].getElementById("lblemployee").value;
            if (RegEx.IsMatch(empl, word))
            {
                datalist.rows[i].visible = false;
            }
        }

    }