2013-08-12 1 views
-1

Я немного упростил это, чтобы объяснить.jquery multiple select делает загрузку ajax, когда был выбран предварительный выбор

Если у меня есть несколько зависимых отступов, давайте возьмем пример простого региона страны.

Сначала выберите страны загрузки, а второй выберите грузы, относящиеся к выбранному стране, а третий выбирает регион, относящийся к выбранному городу.

Я не хочу устанавливать асинхронное значение false.

$(document).ready(function() { 
    // Enumerate select lists 
    // Country is already filled 

    enumerateChildDropDown("Town", $("Country").val()); 

    // This shouldnt load until the above has finished 
    enumerateChildDropDown("region", $("Town").val()); 

    // Note there could be many more of these 
}); 

function enumerateChildDropDown(selectId, parentId) { 

    $.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "@Url.Action("foo", "foo")", 
    data: { parentId: parentId}, 
    }).done(function (returnedData) { 
    // Fill selectId here etc 
    }).fail(function (jqXHR, exception) { 
    // Some Alert 
    }); 
} 

Этот пример был значительно упрощен, поскольку реальное приложение загружает много данных для каждого выбора и не имеет ничего до 10+ зависимых полей, следовательно, использование одной функции AJAX.

Я рассмотрел возможность использования какого-либо обратного вызова, но я нахожу разные примеры версий JQuery, что делает вещи немного запутанными. Я хочу придерживаться JQuery и не использовать какую-либо другую библиотеку, то есть knockoutjs.

+0

Вероятно, вы уже знаете эту информацию, но в случае, если вы не [здесь пример, который относится к вашему вопросу] (http://stackoverflow.com/questions/16924082/dynamic-drop-down -Box/16924652 # 16924652). – gibberish

+0

Проблема заключается не в создании списков выпадающих списков, а в том, что дочерний список ожидает завершения родительской загрузки без создания async: false. –

+0

Зачем голосовать без всякой причины или объяснения? –

ответ

0

Вы можете использовать обратные вызовы, отсрочки или обещания. Вы даже можете синхронизировать AJAX jQuery, поворачивая async на false (по умолчанию он будет равен true).

Если вы хотите придерживаться JQuery асинхронном, то я предлагаю взглянуть здесь: http://api.jquery.com/promise/

Из примеров:

var div = $("<div />"); 

div.promise().done(function(arg1) { 
    // will fire right away and alert "true" 
    alert(this === div && arg1 === div); 
});