Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.12.2014, 19:43
Аватар для PesBarbos
Интересующийся
Отправить личное сообщение для PesBarbos Посмотреть профиль Найти все сообщения от PesBarbos
 
Регистрация: 05.10.2014
Сообщений: 10

Подсказка при наборе текста
Делаю подсказку при наборе текста:

arr - массив с подсказками, например ["мебель"]
value - строка с запросом пользователя, например "меб"

for (var i = 0; < arr.length; i++) // перебираем массив
    if (value == arr[i].substr(0, value.length)) // ищем совпадение
        // выводим подсказку "мебель"


Для запросов и элементов состоящих из одного слова это работает отлично, но есть же ещё и словосочетания.

Например, arr = ["мебель офисная"], по запросу "меб" найдёт, но по запросу "офисн" не найдёт.

Ок, думаю, надо значит элементы-словосочетания пробелом в новый массив дробить и производить поиск уже в этом новом массиве.

arr2 = ["мебель", "офисная"]

Так и по "меб" найдёт и по "офисн" тоже. А по запросам "мебель офисная" и "офисная мебель" не найдёт!

Значит, думаю, нужно их добавить:

arr2 = ["мебель", "офисная", "офисная мебель", "мебель офисная"]

Но тогда отдельные то слова мне зачем?

В итоге получается что словосочетания нужно дробить на отдельные слова и перебирать их в новом массиве во всех возможных вариантах:

arr2 = ["офисная мебель", "мебель офисная"]

А если не 2, а 3 слова?

3 слова - 6 комбинаций
4 слова - 24 комбинаций
5 слов - 120 комбинаций
6 слов - 720 комбинаций

Помимо громадного количества комбинаций вылезает ещё проблема этой самой подсказки. Например по запросу "моск" будет вылезать подсказка "офисная мебель в москве". Ничего страшного, конечно, но хотелось бы видеть вводимое слово на первом месте, можно его конечно передвинуть в начало строки, но не всегда это выглядит нормально: "москве офисная мебель в", значит нужно переносить с предлогом: "в москве офисная мебель". Далее на горизонте уже маячит проблема того, что вся подсказка будет забита каким то мусором, в котором что то там в конце строки совпало.

В общем, тут я понял что изобретаю велосипед и решил спросить совета.
Ответить с цитированием
  #2 (permalink)  
Старый 09.12.2014, 20:07
Интересующийся
Отправить личное сообщение для senex Посмотреть профиль Найти все сообщения от senex
 
Регистрация: 09.12.2014
Сообщений: 10

Посмотри здесь: http://jqueryui.com/autocomplete/
Ответить с цитированием
  #3 (permalink)  
Старый 09.12.2014, 20:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

PesBarbos,
если вы не поисковик делаите, как яндекс, то достаточно поиска на 1слово -- а следующее слово если есть такая необходимость берите из того текста с которым работаите (или одно из следующих слов)- нет в вашем тексте офисной сковородки и не фиг тогда и хранить такую комбинацию
Ответить с цитированием
  #4 (permalink)  
Старый 09.12.2014, 22:51
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

<html>
<head>
<meta charset="windows-1251" />
</head>
<body>
<input />
<div>
</div>
<script>

div=document.querySelector("div")
document.querySelector("input").oninput=function(){
 var re=new RegExp(this.value), text=""
 for(var i=0; i<arr.length; i++){if(re.test(arr[i])) text+=arr[i]+"<br>"}
 div.innerHTML=text
}
arr=[
"мебель офисная",
"стол компьютерный",
"стул мягкий"
]
</script>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2014, 04:16
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

<input type="text" list="suggestions">
<datalist id="suggestions">
    <option>мебель офисная</option>
    <option>стол компьютерный</option>
    <option>стул мягкий</option>
</datalist>
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2014, 08:27
Аспирант
Отправить личное сообщение для myshara Посмотреть профиль Найти все сообщения от myshara
 
Регистрация: 25.06.2012
Сообщений: 37

Всем привет!

Уважаемые, krutoy и danik.js.

Все это хорошо. Но...
Но проблема в браузерах.
Погоняйте свой код (да и любое автодополнение) на Mozila,Opera, Safari и др.
Включите планшет и там через UC, Dolphin, Веб-браузер.
Ощутите всю "мощь" браузерных возможностей.
Сделай продукт кроссбраузерным!

P.S.:
Цитата:
Альберт Эйнштейн

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Ответить с цитированием
  #7 (permalink)  
Старый 10.12.2014, 12:25
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от myshara
Но проблема в браузерах.
Что из того, что я написал некроссбраузерно? RegExp? div? innerHTML?
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2014, 15:45
Аспирант
Отправить личное сообщение для myshara Посмотреть профиль Найти все сообщения от myshara
 
Регистрация: 25.06.2012
Сообщений: 37

Уважаемый, krutoy.

Все что вы указали кросбраузерно... Но...

1) Я не говорил о вашем скрипте ничего.
2) В разных браузерах разный принцип автодополнения:
Пример
-Chrome: ищет только по полному соответствию вводимых символов относительно начала строки вхождения.
-Mozila: ищет подстроку в строке не зависимо от точки вхождения.
3) Для русского алфавита есть зависимость от регистра вводимых символов. Для английского нет.

Я вел речь о поддержке браузерами самого автодополнения как такового.
И все дело не в тегах HTML и синтаксиса Jquery или JavaScript, а именно в движке браузера.

Эксперементируйте. И увидите сами.

А насколько я понял, PesBarbos желал бы реализацию как в Mozila Firefox, и более того, регистронезависимую. Причем на любом из браузеров чтобы работало так, как задумано разработчиком, а не так, как хочет тот или иной браузер.

чтобы при вводе:
сту
мяг
СтУ
мЯг
Результат автодополнения(в любом случае):
стул мягкий
Ответить с цитированием
  #9 (permalink)  
Старый 10.12.2014, 19:01
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от myshara
Я не говорил о вашем скрипте ничего.
Ну как же, в вашем посте было обращение и ко мне, в том числе.
Сообщение от myshara
PesBarbos желал бы реализацию как в Mozila Firefox
Не знаю, об этом ничего не написано, он вообще не просил никакую реализацию, он спрашивал, как сделать, чтобы автокомплит был не только по первому слову, я написал все это лишь для наглядности.
Сообщение от myshara
регистронезависимую
В моем скрипте это решается выставлением одного флага.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике по datefield выделение текста demi ExtJS 1 19.10.2014 22:28
Подскажите пример autocomplete (подсказка при наборе текста) без jQuery PesBarbos Элементы интерфейса 7 13.10.2014 09:32
Изменение цвета текста кнопки и цвета кнопки при нажатии Setta jQuery 22 31.07.2013 17:48
Выполнение функции при паузе в наборе текста Kiomot jQuery 3 10.07.2011 16:06
Всплывающее окошко, как подсказка при наведении на кнопку. rastafaray Общие вопросы Javascript 4 24.05.2008 00:55