livesearch.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. $(document).ready(function() {
  2. var search_field = $('#id_livesearch');
  3. var real_field = $('#id_' + search_field.attr('data-field'));
  4. var select_fields = $('#select select');
  5. var search_key = search_field.attr('data-key');
  6. var label = search_field.attr('data-label');
  7. if (!label) {
  8. label = 'name';
  9. }
  10. // Update livesearch text when real field changes
  11. if (real_field.val()) {
  12. search_field.val(real_field.children('option:selected').text());
  13. }
  14. real_field.change(function() {
  15. if (real_field.val()) {
  16. search_field.val(real_field.children('option:selected').text());
  17. } else {
  18. search_field.val('');
  19. }
  20. });
  21. search_field.autocomplete({
  22. source: function(request, response) {
  23. $.ajax({
  24. type: 'GET',
  25. url: search_field.attr('data-source'),
  26. data: search_key + '=' + request.term,
  27. success: function(data) {
  28. var choices = [];
  29. $.each(data.results, function (index, choice) {
  30. choices.push({
  31. value: choice.id,
  32. label: choice[label]
  33. });
  34. });
  35. response(choices);
  36. }
  37. });
  38. },
  39. select: function(event, ui) {
  40. event.preventDefault();
  41. search_field.val(ui.item.label);
  42. select_fields.val('');
  43. real_field.empty();
  44. select_fields.attr('disabled', 'disabled');
  45. real_field.append($("<option></option>").attr('value', ui.item.value).text(ui.item.label));
  46. real_field.change();
  47. // Disable parent selection fields
  48. // $('select[filter-for="' + real_field.attr('name') + '"]').val('');
  49. },
  50. minLength: 4,
  51. delay: 500
  52. });
  53. search_field.change(function() {
  54. if (!search_field.val()) {
  55. select_fields.removeAttr('disabled');
  56. select_fields.val('');
  57. }
  58. });
  59. });