Подсказка при заполнении input на JS04.09.2021 От: faq Из: Веб-строительство Dram 16 апреля 2020, 11:02 660Мне нужно чтобы при заполнении формы, данные искались в базе и предлагались к выбору.Сам я JS не знаю, но на сайте у меня уже был похожий лайф поиск и я взял код оттуда и немного изменил:jQuery(document).ready(function() { jQuery(document).on('keyup', '#search', function(e) { var name = jQuery(this).val(); if(name.length > 2) { jQuery('#search-results').html(''); jQuery.ajax({ 'type': 'GET', 'url': '/index.php', 'dataType': 'json', 'data': { 'option': 'com_form', 'view': 'item', 'format': 'json', 'task': 'search', 'name': name }, 'success': function (res) { jQuery('.msg').html(''); jQuery('#search-results').html(''); jQuery.each(res, function (n, item) { jQuery('#search-results').append('<div class="mod-row">'+ item.name +'</div>'); }); if(res) { jQuery('#search-results').show(); }else{ jQuery('#search-results').hide(); } } }); } }); });Теперь все работает, слова находит — но как сделать чтобы по одному из найденных слов можно было кликнуть и оно бы вставилось в инпут формы? ivan-lev 16 апреля 2020, 11:38Гугл по autocomplete выдаст кучу вариантов.Jquery autocompletehttps://jqueryui.com/autocomplete/ Dram 16 апреля 2020, 11:45Я не знаю синтаксиса JS и не смогу вставить что-то без ошибок в свой код 🙁 Dram 16 апреля 2020, 18:51Гуглил, читал, вот что понял из прочитанного.Нужно из полученного ответа создать массив и передать его в форму.Попытался сделать это так изменив действующий код (выделил жирным)jQuery(document).ready(function() {$("#search").autocomplete({ jQuery(document).on('keyup', '#search', function(e) { var name = jQuery(this).val(); if(name.length > 2) { jQuery('#search-results').html(''); jQuery.ajax({ 'type': 'GET', 'url': '/index.php', 'dataType': 'json', 'data': { 'option': 'com_form', 'view': 'item', 'format': 'json', 'task': 'search', 'name': name }, 'success': function (res) { jQuery('.msg').html(''); jQuery('#search-results').html('');var suggestions = []; jQuery.each(res, function (n, item) {suggestions.push(item.name); jQuery('#search-results').append('<div class="mod-row">'+ item.name +'</div>'); }); add(suggestions); if(res) { jQuery('#search-results').show(); }else{ jQuery('#search-results').hide(); } } }); } }); });});В итоге и поиск перестал работать и автокомплит не заработал ((( Samail 16 апреля 2020, 19:35Dram:Гуглил, читал, вот что понял из прочитанного. Нужно из полученного ответа создать массив и передать его в форму.Нет наверное нужно сделать что-то вроде этого: jQuery('#search-results').on('click', 'div.mod-row', function(e){ jQuery('#search').val( jQuery(this).text() ); }); Вместо #search селектор того инпута куда текст вставить нужно. onep 16 апреля 2020, 19:48Dram:Гуглил, читал, вот что понял из прочитанного.Про автокомплит что-то не дочитали. Примерно так должно быть jQuery(document).ready(function() { $("#search").autocomplete({ position: { my: "left top", at: "left bottom", collision: "none", offset: "1 4" }, source: function (e, t) { var name = jQuery(this).val(); jQuery('#search-results').html(''); jQuery.ajax({ 'type': 'GET', 'url': '/index.php', 'dataType': 'json', 'data': { 'option': 'com_form', 'view': 'item', 'format': 'json', 'task': 'search', 'name': name }, 'success': function (e) { t($.map(e, function (e) { return { name: e.name, } })) } }); }, minLength: 2 }).data("ui-autocomplete")._renderItem = function (e, t) { return $("<li></li>").data("item.autocomplete", t).append("<i class="">" + t.name + "</i>").appendTo(e); }; }); Dram 17 апреля 2020, 06:12В итоге методом тыка сделал так, выкинул лишнее, внутри все собираю пушем в архив, а автокомплит отдельной функцией, все работает: var suggestions = []; function nameSearch() { $( "#search" ).autocomplete({ source: suggestions }); } jQuery(document).ready(function() { jQuery(document).on('keyup', '#search', function(e) { var name = jQuery(this).val(); if(name.length > 2) { jQuery('#search-results').html(''); jQuery.ajax({ 'type': 'GET', 'url': '/index.php', 'dataType': 'json', 'data': { 'option': 'com_form', 'view': 'item', 'format': 'json', 'task': 'search', 'name': name }, 'success': function (res) { jQuery('.msg').html(''); jQuery('#search-results').html(''); jQuery.each(res, function (n, item) {suggestions.push(item.name); }); } }); } }); });и в инпут еще добавилonkeydown=»nameSearch()» onep 17 апреля 2020, 06:21Проще же можно _jsfiddle.net/60v9ebmw/ Dram 17 апреля 2020, 06:45onep, а как в ваш последний пример корректно вставить? jQuery.ajax({ ‘type’: ‘GET’, ‘url’: ‘/index.php’, ‘dataType’: ‘json’, ‘data’: { ‘option’: ‘com_form’, ‘view’: ‘item’, ‘format’: ‘json’, ‘task’: ‘search’, ‘name’: name },И еще вопрос — трижды встречающееся #search — это id инпута? onep 17 апреля 2020, 06:54Dram:как в ваш последний пример корректно вставить?Так же как и в вашем коде вставляйте _jsfiddle.net/m01g92j4/1/Dram:трижды встречающееся #search — это id инпута?Да, <input id=»search» type=»text» /> ivan-lev 17 апреля 2020, 07:00Ваш$.ajax({иjQuery.ajax({из примера — это одна и та же функция. Судя по коду, как-то так должно сработать.jQuery(document).ready(function($) { $("#search").autocomplete({ source: function(e, t) { $.ajax({ 'type': 'GET', 'url': '/index.php', 'dataType': 'json', 'data': { 'option': 'com_form', 'view': 'item', 'format': 'json', 'task': 'search', 'name': name }, 'success': function(e) { t($.map(e, function(e) { return { value: e.name, } })) } }) }, minLength: 3, select: function (t, n) { $("#search").val(n.item.value) } }).data("ui-autocomplete")._renderItem = function(e, t) { return $("<li></li>").data("item.autocomplete", t).append(t.value).appendTo(e); }});Dram:трижды встречающееся #search — это id инпута?Именно оно. Похожие записи:Cannot set property '_renderItem' of undefined C ++ 20: я — матрица, вещание, np.dot () и np.matmul () Класс, показывающий формат, аналогичный var_dump v1.0.5 Использование класса данных при парсинге с помощью запросов Класс, показывающий формат, аналогичный var_dump
Dram
Мне нужно чтобы при заполнении формы, данные искались в базе и предлагались к выбору.
Сам я JS не знаю, но на сайте у меня уже был похожий лайф поиск и я взял код оттуда и немного изменил:
Теперь все работает, слова находит — но как сделать чтобы по одному из найденных слов можно было кликнуть и оно бы вставилось в инпут формы?
ivan-lev
Гугл по autocomplete выдаст кучу вариантов.
Jquery autocomplete
https://jqueryui.com/autocomplete/
Dram
Я не знаю синтаксиса JS и не смогу вставить что-то без ошибок в свой код 🙁
Dram
Гуглил, читал, вот что понял из прочитанного.
Нужно из полученного ответа создать массив и передать его в форму.
Попытался сделать это так изменив действующий код (выделил жирным)
В итоге и поиск перестал работать и автокомплит не заработал (((
Samail
Гуглил, читал, вот что понял из прочитанного.
Нужно из полученного ответа создать массив и передать его в форму.
Нет наверное нужно сделать что-то вроде этого:
Вместо #search селектор того инпута куда текст вставить нужно.
onep
Гуглил, читал, вот что понял из прочитанного.
Про автокомплит что-то не дочитали. Примерно так должно быть
Dram
В итоге методом тыка сделал так, выкинул лишнее, внутри все собираю пушем в архив, а автокомплит отдельной функцией, все работает:
и в инпут еще добавил
onep
Проще же можно _jsfiddle.net/60v9ebmw/
Dram
onep, а как в ваш последний пример корректно вставить?
‘type’: ‘GET’,
‘url’: ‘/index.php’,
‘dataType’: ‘json’,
‘data’: {
‘option’: ‘com_form’,
‘view’: ‘item’,
‘format’: ‘json’,
‘task’: ‘search’,
‘name’: name
},
И еще вопрос — трижды встречающееся #search — это id инпута?
onep
как в ваш последний пример корректно вставить?
Так же как и в вашем коде вставляйте _jsfiddle.net/m01g92j4/1/
трижды встречающееся #search — это id инпута?
Да, <input id=»search» type=»text» />
ivan-lev
Ваш
и
из примера — это одна и та же функция. Судя по коду, как-то так должно сработать.
трижды встречающееся #search — это id инпута?
Именно оно.