var typeAheadRequest = null; RegExp.escape = function (str) { return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"); }; jQuery.widget("custom.catcomplete", jQuery.ui.autocomplete, { _renderMenu: function (ul, items) { var self = this, currentCategory = ""; jQuery.each(items, function (index, item) { if (item.category != null && item.category != 'taxonomy' && item.category != currentCategory) { ul.append("
  • " + item.category + "
  • "); currentCategory = item.category; } self._renderItem(ul, item); }); }, _renderItem: function (ul, item) { return jQuery("
  • ").data("ui-autocomplete-item", item).append("" + item.label.replace(new RegExp(RegExp.escape(this.term), 'gi'), '$&') + "").appendTo(ul); } }); jQuery('input#query').catcomplete({ appendTo: "#search-form", delay: 0, source: function (request, response) { processTypeAhead(request, response); }, open: function () { $('.ui-autocomplete').css('z-index', 9); }, select: function (event, ui) { $("input#query").val(ui.item.value); var $form = $("#header-search"); markTypeAhead($form); $form.submit(); } }); jQuery('input#query-insight').catcomplete({ delay: 0, source: function (request, response) { processTypeAhead(request, response); }, select: function (event, ui) { $("input#query-insight").val(ui.item.value); var $form = $("#header-search-insight"); markTypeAhead($form); $form.submit(); } }); function markTypeAhead($form) { $form.append(""); } function processTypeAhead(request, response) { if (typeAheadRequest !== null) { typeAheadRequest.abort(); } typeAheadRequest = $.get("/search/typeAhead.ajax", {typedText: request.term}, function(data) { response(data); }); }