Подтвердить что ты не робот

Событие вмешивается в результаты, полученные с помощью Select2 plugin ajax-retrieved

Я использую плагин Igor Vaynberg Select2 jQuery с опцией Бесконечный прокрутка с удаленными данными, чтобы сделать окно поиска автозаполнения для моего сайта. AJAX отлично работает, и результаты появляются, но они не поддаются выбору - событие изменения никогда не запускается, и когда вы нажимаете на результат, ничего не происходит.

В консоли Chrome также отсутствуют ошибки, поэтому я думаю, что это не синтаксическая ошибка, а плагин ошибочно принимает ее за отключенный блок выбора. EDIT:, попробовав отдельное событие on-click для списка результатов, который так и не был запущен, теперь я уверен, что что-то мешает событиям.

Здесь мой код в настоящее время

// Search
$("#site-search").select2({
    placeholder: "Search posts",
    minimumInputLength: 3,
    ajax: {
        url: "http://localhost/mysite/search",
        dataType: 'json',
        quietMillis: 500,
        data: function (term, page) {
            return {
                q: term,
                page_limit: 10,
                page: page // page number
            };
        },
        results: function (data, page) {
            var more = (page * 10) < data.length; // whether or not there are more results available

            // return the value of more to tell if more results can be loaded
            return {results: data, more: more};
        }
    },
    formatResult: function(post) {
        // return html markup for individual result item
        markup = '<img src="'+post.image+'" style="width:40%;float:left;margin-right:5px">';
        markup += '<p>'+post.title+'</p>';
        markup += '<div class="clearfix"></div>';
        return markup;
    },
    formatSelection: function(post) {
        // This shows up in the select box
        return post.title;
    },
    dropdownCssClass: "bigdrop" // apply css that makes the dropdown taller
}).on('change', function(e) {
    try {
        var slug = e.val.slug;
        window.location.href = "http://localhost/mysite/posts/"+slug;
    } catch(error) {
        console.log('Selected search result is invalid: ');
    }
});

Само окно выбора - это просто ввод с типом: hidden

<input type="hidden" class="bigdrop" id="site-search" style="width:100%;height:auto">
4b9b3361

Ответ 1

Кажется, ваша проблема, ваши данные результата не имеют свойства с именем "id". Плагины Select2 хотят иметь поле id на данных, а если нет, то он делает опцию "unselectable". Вы можете дать id функции, чтобы переопределить это поведение:

$("#site-search").select2({
   id: function(obj) {
      return obj.slug; // use slug field for id
   },
   ...