кто разбирается в js?
поиск ищет только английские буквы и цифры… русские буквы игнорирует вот код скрипта кто знает решение?
вот код скрипта
/* * jQuery Autocomplete plugin 1.1 * * Copyright (c) 2009 Jörn Zaefferer * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $ */ ;(function($) { $.fn.extend({ autocomplete: function(urlOrData, options) { var isUrl = typeof urlOrData == "string"; options = $.extend({}, $.Autocompleter.defaults, { url: isUrl ? urlOrData : null, data: isUrl ? null : urlOrData, delay: isUrl ? $.Autocompleter.defaults.delay : 10, }, options); // if highlight is set to false, replace it with a do-nothing function options.highlight = options.highlight || function(value) { return value; }; // if the formatMatch option is not specified, then use formatItem for backwards compatibility options.formatMatch = options.formatMatch || options.formatItem; new $.Autocompleter(this, options); }); }, result: function(handler) { return this.bind("result", handler); }, search: function(handler) { return this.trigger("search", [handler]); }, flushCache: function() { return this.trigger("flushCache"); }, setOptions: function(options){ return this.trigger("setOptions", [options]); }, unautocomplete: function() { return this.trigger("unautocomplete"); } }); $.Autocompleter = function(input, options) { UP: 38, DOWN: 40, DEL: 46, TAB: 9, RETURN: 13, ESC: 27, COMMA: 188, PAGEUP: 33, PAGEDOWN: 34, BACKSPACE: 8 }; // Create $ object for input element var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass); var timeout; var previousValue = ""; var cache = $.Autocompleter.Cache(options); var hasFocus = 0; var lastKeyPressCode; var config = { mouseDownOnSelect: false }; var select = $.Autocompleter.Select(options, input, selectCurrent, config); var blockSubmit; // prevent form submit in opera when selecting with return key $.browser.opera && $(input.form).bind("submit.autocomplete", function() { if (blockSubmit) { blockSubmit = false; return false; } }); // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { // a keypress means the input has focus // avoids issue where input had focus before the autocomplete was applied hasFocus = 1; // track last key pressed lastKeyPressCode = event.keyCode; switch(event.keyCode) { event.preventDefault(); if ( select.visible() ) { } else { onChange(0, true); } break; event.preventDefault(); if ( select.visible() ) { } else { onChange(0, true); } break; event.preventDefault(); if ( select.visible() ) { select.pageUp(); } else { onChange(0, true); } break; event.preventDefault(); if ( select.visible() ) { select.pageDown(); } else { onChange(0, true); } break; // matches also semicolon if( selectCurrent() ) { // stop default to prevent a form submit, Opera needs special handling event.preventDefault(); blockSubmit = true; return false; } break; select.hide(); break; default: clearTimeout(timeout); timeout = setTimeout(onChange, options.delay); break; } }).focus(function(){ // track whether the field has focus, we shouldn't process any // results if the field no longer has focus hasFocus++; }).blur(function() { hasFocus = 0; if (!config.mouseDownOnSelect) { hideResults(); } }).click(function() { // show select when clicking in a focused field if ( hasFocus++ > 1 && !select.visible() ) { onChange(0, true); } }).bind("search", function() { // TODO why not just specifying both arguments? var fn = (arguments.length > 1) ? arguments[1] : null; function findValueCallback(q, data) { var result; if( data && data.length ) { for (var i=0; i < data.length; i++) { if( data[i].result.toLowerCase() == q.toLowerCase() ) { result = data[i]; break;
#2
7 апреля 2013 в 19:51
можно прикрутить тот, что в дистрибутиве autocomplete
#3
7 апреля 2013 в 19:58
не то
Сегодня в 20:24
#4
7 апреля 2013 в 19:59
нашел такое решение но не помогло
Отрываем файл jquery.autocomplete.js, находим в нем
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams),
Заменяем на:
data: $.extend({
q: encodeURIComponent(lastWord(term)),
limit: options.max
}, extraParams),
Отрываем файл jquery.autocomplete.js, находим в нем
data: $.extend({
q: lastWord(term),
limit: options.max
}, extraParams),
Заменяем на:
data: $.extend({
q: encodeURIComponent(lastWord(term)),
limit: options.max
}, extraParams),
#5
7 апреля 2013 в 20:10
всё остальное в UTF-8? включая форму
#6
7 апреля 2013 в 20:15
всё в UTF-8… всё равно поиск выдаёт только по агло клавиатуре и цифры… рускую клаву не хочет воспринемать
может файле запроса подправить?
может файле запроса подправить?
<?php if (!$q) return; include_once('../includes/global.php'); $auctions = $db->query("SELECT name FROM " . DB_PREFIX . "auctions WHERE closed=0 AND deleted=0 AND active = 1 AND name LIKE '%".$q."%'"); while ($auction_name = $db->fetch_array($auctions)) { $aname = $auction_name['name']; print "$aname\n"; } ?>
#7
7 апреля 2013 в 20:20
сам параметр $_GET['q'] в нормальном виде приходит?
#8
7 апреля 2013 в 20:26
попробуйте как вариант использовать mb_strtolower
#9
7 апреля 2013 в 20:36
mb_strtolower
не помогло так же и осталось… поиск русские буквы не воспринемает
не помогло так же и осталось… поиск русские буквы не воспринемает
#10
7 апреля 2013 в 20:43
добавил после $q = strtolower($_GET["q"]);
$q = urldecode($q);
стал воспринемать только букву И и П… мистика)))) остальные буквы по поиску не работают только англ и цифры
$q = urldecode($q);
стал воспринемать только букву И и П… мистика)))) остальные буквы по поиску не работают только англ и цифры
"auctions WHERE LOWER(name) LIKE '%{$q}%' AND closed=0 AND deleted=0 AND active = 1"
а чем стандартный то не подходит, практически тот же самый код /core/ajax/tagsearch.php и тот автокомплит что во втором посте
а чем стандартный то не подходит, практически тот же самый код /core/ajax/tagsearch.php и тот автокомплит что во втором посте
#12
7 апреля 2013 в 20:49
разные движки
#13
7 апреля 2013 в 20:53
$q = urldecode($q); — переменные в суперглобальных массивах уже декодированы, нужно искать раньше,
просто вывести echo $q; в коде что выдаёт?
просто вывести echo $q; в коде что выдаёт?