Возникли проблемы с библиотекой автозаполнения Javascript при получении данных с getJSON - PullRequest
0 голосов
/ 28 марта 2012

У меня возникают проблемы со следующим кодом:

var setupSearch = {


searchSuggest: function(field) {
    $.getJSON('/get-all-journals', {'url':'on'}, function(data) {

        var SHCount = Number($.cookie('SHCount'));
        var SHArray = new Array();
        for (i=1; i <= SHCount; i++) {
            SHArray.push($.cookie('SH'+i));
        }
        $(field).ddautocomplete(removeDuplicate(SHArray), data.response.docs, {
            matchContains: true,
            max: 5,
            cacheLength: 5000,
            selectFirst: false,
            scroll: false,
            formatResult: function(str) { return str; },
            formatItem2: function(item) {
                return item.journal_display_name;
            },  
            formatMatch2: function(item) {
                return item.journal_display_name;
            },  
            formatResult2: function(item) {
                return item.journal_display_name;
            }   
        }); 
    }); 
},  



searchForm: function(form) {

    var field = form.find('textarea');
    // Setup query field for default text behavior
    // setupField(field);

    setupSearch.searchSuggest(field);
    field.autogrow();

    field.keydown(function(e) {
        if (e.keyCode == 13) {
            form.submit();
            return false;
        }   
    }); 

    // Make all forms submitting through Advanced Search Form
    form.submit(function(e) {
        e.preventDefault();
        setupSearch.submitSearch(form, field);
    });
}, 


 submitSearch: function(form, field) {
    if (advancedSearch.checkMinFields() || (!field.hasClass('defaultText') && field.val() != '')) {
        // Sync the refine lists
        // syncCheckboxLists($('#refineList input'), $('#advancedRefineList input'));
        form.find('button').addClass('active');
        $('#advancedSearchForm').submit();
    } else {
        $('#queryField').focus();
    }
},

Когда я пытаюсь использовать раскрывающийся список автозаполнения, нажимая клавишу ввода, кажется, что он сталкивается с «условием гонки», когда форма будетотправьте то, что я напечатал, а не то, что автозаполнение помещает в текстовое поле.Есть ли какой-нибудь способ, которым я могу контролировать порядок событий, чтобы form.submit () использовала автозаполнение, которое заполняет текстовое поле?

1 Ответ

0 голосов
/ 28 марта 2012

Фактическое выпадающее меню автозаполнения, скорее всего, представлено в виде стилизованного списка (или какого-либо другого элемента), который перемещается для размещения под текстовым полем.При отправке попросите вашу функцию подождать (максимум две секунды), чтобы меню автозаполнения было уничтожено или скрыто.Это гарантирует, что плагин успеет заполнить текстовое поле перед отправкой данных.

РЕДАКТИРОВАТЬ

Попробуйте что-то вроде этого:

$("#myDropdown").bind("autocompleteclose", function(){
    // Continue with submitting your form
});

Используйте это, где вы бы отправили свою форму, и поместите код отправки внутри обратного вызова,Таким образом, он будет ждать закрытия автозаполнения перед отправкой формы.Возможно, вы захотите добавить какое-то время ожидания, чтобы оно не отправлялось после долгой задержки (хотя и не известно, когда может произойти что-то подобное).

...