2010-01-10 3 views
2

Я вызываю автозаполнение jquery с результатом запроса GET. Вызов функции автозаполнения выглядит следующим образом:jquery.autocomplete.js - как работает автозаполнение?

$('#id_project_owner_externally').autocomplete('/pm/contact_autocomplete'); 

URL-адрес/пм/contact_autocomplete возвращает список кортежей. Первая часть кортежа - это имя контакта, а вторая часть кортежа - это идентификатор контакта.

Соответствующая функция (часть зрения Джанго) выглядит следующим образом:

def iter_results(results): 
     if results: 
      for r in results: 
       yield '%s|%s\n' % (r.first_name, r.id) 

Теперь мне интересно, что JQuery автозаполнения делает с first_name + ид кортежа. Фактически первое имя помещается в поле ввода. Но что происходит с идентификационной частью. Это важная информация, которая мне нужна.

Можно ли указать jquery, что идентификатор должен быть помещен в определенное скрытое поле?

link to js source

Edit: Решение

<script type="text/javascript"><!--// 
     $('#id_project_manager_externally').autocomplete('/pm/contact_autocomplete').result(function(event, item) {$('#id_project_manager_externally_hidden').attr("value", item[1]);});//--></script> 

ответ

3

plugin docs есть этот пример:

var data = [ {text:'Link A', url:'/page1'}, {text:'Link B', url: '/page2'} ]; 
$("...").autocomplete(data, { 
    formatItem: function(item) { 
    return item.text; 
    } 
}).result(function(event, item) { 
    location.href = item.url; 
}); 

Таким образом, вы в принципе может иметь опцию .result(), который используется для заполнения скрытого поля. , например. $('#my_hidden_field').val(item.extra_value);

+0

Это выглядит многообещающе. Я дам ему попробовать. –

+0

Это правильный ответ. С помощью опции .result() вы можете заменить значение скрытого поля. Результатная часть запускается после того, как пользователь выбрал опцию из раскрывающегося списка автозаполнения. –

2

Вы должны смотреть в jquery.autocomplete.js исходного кода, что ваш код питона делает это просто возвращает идентификатор и имя, разделенный хэш char, по одной записи в строке. Автозаполнение javascript обрабатывает этот вывод, таким образом, это часть кода, которую необходимо изменить, чтобы поместить идентификаторы в ваши скрытые поля.

+0

Взломать автозаполнение js на самом деле не является моим предпочтительным способом. хм .. кажется сложнее, чем ожидалось. –

Смежные вопросы