2014-11-04 3 views
0

Я использую автозаполнение jQuery в специальном сообщении WordPress. При заполнении поля ввода автозаполнения ajax, похоже, работает правильно и возвращает соответствующие данные. Однако, когда я выбираю элемент в раскрывающемся списке, поле ввода очищается. Я прошел шаг за шагом по JavaScript, а поле ввода #title правильно задано функцией populateForm(), но в какой-то момент после завершения моего скрипта поле опустошено.jQuery Ввод автозаполнения очищается

Кто-нибудь знает, что может быть причиной этого, или достойным способом я мог бы обойти его?

Я включил свои js ниже. Сообщите мне, есть ли другая информация, которая может помочь.

(function ($) { 
var url = ajax_object.ajaxurl; 
var popped = [] 

$('#title') 
     .autocomplete({ 
      source: function(request, response) { 
      $.getJSON(url, { 
       term : extractLast(request.term), 
       action : 'autocomplete' 
      }, response); 
     }, 
     search: function() { 
      var term = extractLast(this.value); 
      if (term.length < 2) { 
       return false; 
      } 
     }, 
     select: function(event, ui) { 
      populateForm(ui.item); 
     }, 
     response: function(event, ui) { 
      for (var i in ui.content) { 
       popped.push(ui.content[i]); 
      } 
     } 
    }).data("ui-autocomplete")._renderItem = function(ul, item) { 
      return $("<li></li>") 
       .data("ui-autocomplete-item", item) 
       .append("<a><strong>" + item.name + "</strong> (" + item.username.replace(/[^a-zA-Z]+/g, '') + ")</a>") 
       .appendTo(ul); 
    }; 

function populateForm(obj) { 
    $('input#title').val(obj['username']); 
    for (var property in obj) { 
     if (obj.hasOwnProperty(property)) { 
      $('input#form-' + property).val(obj[property]); 
     } 
    } 
} 

function split(val) { 
    return val.split(/,\s*/); 
} 

function extractLast(term) { 
    return split(term).pop(); 
} 
})(jQuery); 
+1

В самом конце '} (jQuery));' должно быть '}) (jQuery);' – rnevius

ответ

1

Per the Autocomplete docs, в select мероприятия ui.item имеет только два свойства: label и value. Вы передаете его populateForm(), а затем попытаетесь изменить значение вашего текстового ввода на ui.item.username. Если вы откроете консоль разработчика, вы увидите ошибку.

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