Javascript中不区分大小写的自动完成

时间:2015-02-16 13:35:50

标签: javascript jquery jquery-autocomplete

我有一个用于自动完成功能的JavaScript代码。它突出显示在搜索框中输入的文本,并将其与数据库中的文本进行匹配。这是区分大小写的,因此它只突出显示数据库表中的文本。我希望搜索不区分大小写。 这是我现有的代码:

 <script type="text/javascript">
$(function() {
    var availableTags = [<?php echo $tagsString; ?>];

    $( "#tags" ).autocomplete({
      source: availableTags
    });
  });
 $.extend( $.ui.autocomplete.prototype, {
    _renderItem: function( ul, item ) {
        var term = this.element.val(),
            html = item.label.replace( term, "<span class='f1'>$&</span>" );
        return $( "<li></li>" )
            .data( "item.autocomplete", item )
            .append( $("<a></a>").html(html) )
            .appendTo( ul );
    }
});

</script>

2 个答案:

答案 0 :(得分:2)

数据库代码中的

在方差的两边使用LOWER。

... WHERE LOWER(db_field) = LOWER(:text) ...

或者您可以在将输入提供给数据库之前将输入转换为低位,并在此情况下省略右LOWER

如果是LIKE

... WHERE LOWER(db_field) like '%' || LOWER(:text) || '%' ...

请始终正确引用或更好地使用perpared语句以防止SQL注入。

编辑:找到一种更简洁的方式,只使用绑定而不引用

答案 1 :(得分:0)

我假设您使用的是MySQL。

您可以降低字段名称和搜索值

WHERE LOWER( db_table.db_field ) = LOWER(:text) // find exact match

或使用与较低的一样:

WHERE  LOWER( db_table.db_field ) LIKE '%' || LOWER(:text) || '%'  // find all that have this text as substring

但在boh情况下,请记住使用参数化状态网,以避免SQL注入攻击。