Исправьте приложение для поиска в реальном времени и переключите его с одного на множественный выбор

Написал сегодня эти два файла, но пока не работает (должна появиться шторка с предполагаемым результатом). Я почти уверен, что в большинстве случаев ему нужны небольшие исправления, но я не могу понять, какие из них :-( Более того, я совершенно не знаю, как заставить его разрешить множественный выбор. Лучше всего, если я нажму на значок предложенное слово, затем я ввожу запятую и пробел в качестве токена/разделителя, затем другое слово для поиска и т. д. Любая идея/предложение?

<!DOCTYPE html>
<html>

<head>
  <script>
    function showResult(str) {
      if (str.length == 0) {
        document.getElementById("livesearch").innerHTML = "";
        document.getElementById("livesearch").style.border = "0px";
        return;
      }

      if (window.XMLHttpRequest) {
        // code for IE7+, Firefox, Chrome, Opera, Safari
        var xmlhttp = new XMLHttpRequest();
      } else { // code for IE6, IE5
        var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          document.getElementById("livesearch").innerHTML = this.responseText;
          document.getElementById("livesearch").style.border = "1px solid #A5ACB2";
        }
      }
      xmlhttp.open("GET", "livesearch.php?q=" + str, true);
      xmlhttp.send();
    }
    }
  </script>
</head>

<body>

  <p><b>Start typing a name in the input field below:</b></p>
  <form>
    <input type="text" size="30" onkeyup="showResult(this.value)">
    <div id="livesearch"></div>
  </form>
</body>

</html>

<?php
// Array with names
$a[] = "Anna";
$a[] = "Brittany";
$a[] = "Cinderella";
$a[] = "Diana";
$a[] = "Eva";
$a[] = "Fiona";
$a[] = "Gunda";
$a[] = "Hege";
$a[] = "Inga";
$a[] = "Johanna";
$a[] = "Kitty";
$a[] = "Linda";
$a[] = "Nina";
$a[] = "Ophelia";
$a[] = "Petunia";
$a[] = "Amanda";
$a[] = "Raquel";
$a[] = "Cindy";
$a[] = "Doris";
$a[] = "Eve";
$a[] = "Evita";
$a[] = "Sunniva";
$a[] = "Tove";
$a[] = "Unni";
$a[] = "Violet";
$a[] = "Liza";
$a[] = "Elizabeth";
$a[] = "Ellen";
$a[] = "Wenche";
$a[] = "Vicky";

// get the q parameter from URL
$q = $_GET["q"];

$hint = "";

// lookup all hints from array if $q is different from "" 
if ($q !== "") {
    $q = strtolower($q);
    $len=strlen($q);
    foreach($a as $name) {
        if (stristr($q, substr($name, 0, $len))) {
            if ($hint === "") {
                $hint = $name;
            } else {
                $hint .= ", $name";
            }
        }
    }
}

// Output "no suggestion" if no hint was found or output correct values 
echo $hint === "" ? "no suggestion" : $hint;
?>

person G.ManJi    schedule 28.11.2017    source источник
comment
У вас будет гораздо больше шансов получить ответ, если вы сделаете больше, чем просто скопируете/вставьте код из другого ответа (stackoverflow.com/a/ 36001640/3650835). Что вы пробовали? Какие ошибки консоли/php возникают? Что вообще происходит? Каковы ваши идеи, как заставить его работать? и Т. Д.   -  person KayakinKoder    schedule 28.11.2017
comment
@mplungian - о, извините, но на самом деле он не совсем скопирован из другого ответа, так как я нашел его части в двух разных примерах w3school (w3schools.com/php/php_ajax_livesearch.asp и w3schools.com/php/php_ajax_php.asp), и я пытаюсь объединить их вместе, если это возможно - я также нашел (stackoverflow.com/a/36001640/3650835) в Google, прежде чем спрашивать, но я понял, что точно не такая проблема   -  person G.ManJi    schedule 28.11.2017


Ответы (1)


Хорошо, ребята, мне кажется, я нашел решение. На самом деле мне нужно собрать все части вместе, но теоретически это должно сработать. Существует библиотека scriptoculous, в которой есть функция (ajax.autocompleter()), которая делает именно то, что я ищу. Дополнительные сведения см. здесь: http://www.codicefacile.it/tutorials/tutorials.php/52/Ajax_Autocompleter_nei_nostri_form Я читал, что, поскольку он использует прототип.js в качестве библиотеки для работы, он будет конфликтовать с другими приложениями на той же странице, которые вместо этого используют jquery.js. Но следующий обходной путь должен исправить это: https://stackoverflow.com/a/3641464/9016436

person G.ManJi    schedule 28.11.2017