Интересно, знает ли кто-нибудь способ автозаполнения поля ввода после того, как вы введете 3 буквы, а также получите идентификатор соответствующего значения?

Я пробовал что-то подобное с пользовательским интерфейсом Jquery: Он отлично работает с тестовым массивом, но не с реальным массивом, который я пытаюсь использовать. Это потому, что формат неправильный? Я включаю массив до json_encode и после.

var test = ["1899 Hoffenheim vs Borussia Dortmund", "SD Eibar vs Granada CF", "Fiorentina vs AS Roma"];
var availableTags =  <?php echo json_encode($testArray); ?>;
console.log(availableTags);
    $( "#test" ).autocomplete({
    source: test
    });
});

До json_encode

 Array
    (
        [0] => Array
            (
                [id] => 33820950
                [match] => 1899 Hoffenheim vs Borussia Dortmund
            )

        [1] => Array
            (
                [id] => 33820951
                [match] => SD Eibar vs Granada CF
            )

        [2] => Array
            (
                [id] => 33820952
                [match] => Fiorentina vs AS Roma
            )

        [3] => Array
            (
                [id] => 33820991
                [match] => Hibernian vs Rangers
            )

        [4] => Array
            (
                [id] => 33821044
                [match] => RKC Waalwijk vs FC Twente
            )

        [5] => Array
            (
                [id] => 33821045
                [match] => Middlesbrough vs Stoke City
            )

        [6] => Array
            (
                [id] => 33821108
                [match] => Deportivo La Coruña vs CD Tenerife
            )

        [7] => Array
            (
                [id] => 33821138
                [match] => Zaglebie Lubin vs Legia Warszawa
            )

        [8] => Array
            (
                [id] => 34096342
                [match] => Everton vs Arsenal
            )

        [9] => Array
            (
                [id] => 34096343
                [match] => Aston Villa vs Southampton
            )

    )

После json_encode

[{"id":"33820950","match":"1899 Hoffenheim vs Borussia Dortmund"},{"id":"33820951","match":"SD Eibar vs Granada CF"},{"id":"33820952","match":"Fiorentina vs AS Roma"},{"id":"33820991","match":"Hibernian vs Rangers"},{"id":"33821044","match":"RKC Waalwijk vs FC Twente"},{"id":"33821045","match":"Middlesbrough vs Stoke City"},{"id":"33821108","match":"Deportivo La Coru\u00f1a vs CD Tenerife"},{"id":"33821138","match":"Zaglebie Lubin vs Legia Warszawa"},{"id":"34096342","match":"Everton vs Arsenal"},{"id":"34096343","match":"Aston Villa vs Southampton"}];
0
Seb1929 20 Дек 2019 в 22:49

2 ответа

Законченный рабочий код. Где вы можете найти совпадение, и оба совпадения и соответствующий идентификатор будут сохранены.

  <form action="" method="POST" >
      <input id="match_search" name="match_search" onChange="this.form.submit()">
      <input id="match_id" name="match_id" hidden>
    </form>

    <?php
    if (isset($_POST['match_search'])) {
      $match = $_POST['match_search'];
      $match_id = $_POST['match_id'];
      echo $match.'<br>';
      echo $match_id;
    }
    ?>
    <script>
    var availableMatches = <?=json_encode($testArray); ?>;
    $(function() {
        $("#match_search").autocomplete({
            delay: 0,
            source: availableMatches,
            select: function(event, ui) {
                $('#match_search').val(ui.item.label);
                $('#match_id').val(ui.item.value);
                return false;
            },
            focus: function(event, ui) {
                $("#match_search").val(ui.item.label);
                return false;
            }

        });
    });
    </script>
0
Seb1929 20 Дек 2019 в 22:50

Обновление:

Извините, сначала я вас неправильно понял. Я предполагаю, что вы хотите сохранить все текстовые значения ключа match в массив json. Поэтому я беру ваш $testArray, перебираю его и назначаю все новому массиву, который соответствует формату.

Попробуй это:

<?php
$array = [];
$i = 0;
$id = 0;
$ids = '[';
$availableTags = '[';
foreach($testArray as $val) {
   $id[] = "\"".$val[$i]['id']."\"";
   $array[] = "\"".$val[$i]['match']."\"";
   $i++;
}
$id = implode(', ', $id);
$array = implode(', ', $array);
$availableTags .= $array . '];';
$ids = $id . '];';
?>
var availableIds = <?= $ids; ?>
var availableTags = <?= $availableTags; ?>
console.log(availableTags);
    $( "#test" ).autocomplete({
    source: 
       return {
          label: availableTags,
          value: availableIds
       };
    });
});
0
AlexioVay 20 Дек 2019 в 20:42