Как различить отображаемое значение и значение идентификатора с помощью плагина автозаполнения пользовательского интерфейса jQuery с удаленным источником данных? - PullRequest
0 голосов
/ 03 января 2012

У меня есть окно поиска в моем приложении, которое использует плагин jQuery UI Autocomplete для отображения списка пользователей в системе на основе фамилии из удаленного источника данных.

Когда пользователь щелкает из списка автозаполнения, я бы хотел, чтобы браузер перенаправлял на отдельную страницу этого пользователя (на основе параметра GET). Однако параметром GET для страницы пользователя является идентификатор пользователя, отличающийся от отображаемых значений last_name, first_name.

Как мне вставить «идентификатор» пользователя в параметр GET, по-прежнему отображая значения имени и фамилии в раскрывающемся списке?

Я видел похожие вопросы, задаваемые здесь, но ни одного при использовании удаленного источника данных.

Любая помощь, которую вы можете оказать, будет потрясающей!

Javascript:

$(document).ready(function() {

    $( ".user_autocomplete" ).autocomplete({
            source: "../../db/users.php",
            minLength: 0,
            focus: function (event, ui) {
                this.value = ui.item.value;
            },          
    }).bind( "autocompleteselect", function(event, ui) {
        window.location.href = "/users/index.php?id=" + this.value;
    });

});  

Удаленный источник данных (users.php)

<?php

$return_arr = array();

if(isset($_GET['term'])) {
    $mysearchString = $_GET['term'];
}

$sth = $dbh->query("SELECT id, first_name, last_name FROM users
                    WHERE last_name LIKE '$mysearchString%'
                    ORDER BY last_name");

while ($row = $sth->fetch ()) { 

    $row_array = $row['last_name'].', '.$row['first_name'];

    array_push($return_arr,$row_array); 

}

echo json_encode($return_arr);

?>

1 Ответ

2 голосов
/ 03 января 2012

Чтобы иметь идентификатор, отличный от (отображаемого) ЗНАЧЕНИЯ, вы должны вернуть массив объектов в кодировке JSON, например:

[
   {
      "id":"1",
      "value":"Doe, John"
   },
   {
      "id":"2",
      "value":"Smith, Mary"
   }
]

Затем можно использовать ui.item.id для получения выбранного идентификатора..

ПРИМЕЧАНИЕ. Также можно указать свойство «label», отличное от свойства «value».Вот информация из документации:

Локальные данные могут быть простым массивом строк или содержать объекты для каждого элемента в массиве, со свойством label или value или с обоими.Свойство label отображается в меню предложений.Значение будет вставлено в элемент ввода после того, как пользователь выберет что-либо из меню.Если указано только одно свойство, оно будет использоваться для обоих, например.если вы предоставляете только значения-свойства, значение также будет использоваться в качестве метки.

РЕДАКТИРОВАТЬ:

Я не парень PHP, но я представляю код для созданиямассив JSON будет выглядеть примерно так:

<?php
$return_arr = array();

    ... snip ...

while ($row = $sth->fetch ()) { 
    $row_array = array(
        "id" => $row['id'], 
        "value" => $row['last_name'].', '.$row['first_name']
    );
    array_push($return_arr, $row_array); 
}
echo json_encode($return_arr);
?>
...