JQuery автозаполнение, лучший способ присоединиться к отображаемым данным

Для простоты у меня есть jquery autocomplete работает, что является лучшим подходом, соединяя / отображая несколько строк из массива в одном поле ввода.

Мой php выглядит так

$return_arr = array();

/* If connection to database, run sql statement. */
if ($conn)
{
    $fetch = mysql_query("SELECT * FROM alltickets where name like '%" . mysql_real_escape_string($_GET['term']) . "%'");

    /* Retrieve and store in array the results of the query.*/
    while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
        $row_array['id'] = $row['id'];
        $row_array['value'] = $row['name'];
        $row_array['thedate'] = $row['date'];

        array_push($return_arr,$row_array);
    }
}

/* Free connection resources. */
mysql_close($conn);

/* Toss back results as json encoded array. */
echo json_encode($return_arr);

Моя HTML-страница выглядит так

>Please enter what you are looking for</p>

<p class="ui-widget">

<label for="event">Please start entering your event </label>

<input type="text" id="event"  name="event" /></p>

<input type="hidden" id="mysqlid" name="mysqlid" />


<p><input type="submit" name="submitBtn" value="Submit" /></p>

</fieldset>
</form>

<script type="text/javascript">
$(function() {

            $("#event").autocomplete({
                source: "autocomp.php",
                minLength: 2,
                select: function(event, ui) {
                    $('#mysqlid').val(ui.item.id);
                }
            });

        });
</script>

Какой самый эффективный способ отображения "даты" в поле ввода текста с именем event, сразу после "name"

так что прямо сейчас, если я буду искать, "cam" результат будет выглядеть так

camera

Я хочу, чтобы результат выглядел как

camera 17/09/2013

Я вижу, что есть несколько способов сделать это, как лучше? Спасибо

1 ответ

Решение

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

$("#event").autocomplete({
    source: "autocomp.php",
    minLength: 2,
    select: function(event, ui) {
        event.preventDefault();
        this.value = ui.item.value + " " + ui.item.thedate;

        $('#mysqlid').val(ui.item.id);
    }
});

Пример: http://jsfiddle.net/J5rVP/33/


Если вы хотите отобразить дату в списке предложений, у вас есть несколько вариантов:

  1. Заполните value свойство со всей строкой, которую вы хотите отобразить (выполните работу на сервере)
  2. Управляйте ответом, который вы получите от сервера, чтобы заполнить value свойство правильно
  3. Переопределить _renderItem Функция для отображения элементов так, как вы хотите.

В вашем случае, кажется, что № 3, вероятно, лучший путь, так что вот как вы это сделаете:

$("#event").autocomplete({
    source: "autocomp.php",
    select: function (event, ui) {
        event.preventDefault();
        this.value = ui.item.value + " " + ui.item.thedate;
    }
}).data("autocomplete")._renderItem = function (ul, item) {
    return $("<li>")
        .data("item.autocomplete", item)
        .append("<a>" + item.label + " " + item.thedate + "</a>")
        .appendTo(ul);
};

Пример: http://jsfiddle.net/J5rVP/34/

Другие вопросы по тегам