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/
Если вы хотите отобразить дату в списке предложений, у вас есть несколько вариантов:
- Заполните
value
свойство со всей строкой, которую вы хотите отобразить (выполните работу на сервере) - Управляйте ответом, который вы получите от сервера, чтобы заполнить
value
свойство правильно - Переопределить
_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/