Вы можете реализовать это примерно так:
Ваше мнение:
<div data-shipment-mode="A" style="display:none;">
fields that should only be shown for shipment mode A
</div>
<div data-shipment-mode="B" style="display:none;">
fields that should only be shown for shipment mode B
</div>
Ваш JavaScript:
$(document).ready(function() {
$('id-of-shipment-select-menu').change(function() {
var successHandler = function(data) {
var mode = data.mode;
$("div[data-shipment-mode!=" + mode + "]").hide();
$("div[data-shipment-mode=" + mode + "]").show();
};
var shipmentId = $(this).val();
/* replace service_url with the appropriate controller/action */
$.getJSON("/service_url/" + shipmentId, successHandler);
});
});
Изначально все поля, зависящие от режима, скрыты. Затем, когда вы выберете доставку, будет вызван обратный вызов change
. Он отправляет запрос службе (действие контроллера), которая возвращает режим для данной отправки. И вы используете этот режим и показываете только те элементы div, у которых их data-shipment-mode
имеет одинаковое значение.
Вы даже можете расширить это, и когда вы скрываете div, вы можете очистить значения всех входов (и выбрать и т. д.) внутри него, а также отключить их.
Вы можете избежать отправки запроса на сервер, если встроите режим для каждой отправки в ее тег опции:
Вид:
<option id="A_SHIPMENT_ID"
data-shipment-mode="SHIPMENT_MODE_FOR_THIS_SHIPMENT">
Shipment A
</option>
JavaScript:
$(document).ready(function() {
$('id-of-shipment-select-menu').change(function(e) {
var mode = $(e.target).data("shipment-mode");
$("div[data-shipment-mode!=" + mode + "]").hide();
$("div[data-shipment-mode=" + mode + "]").show();
});
});
person
βξhrαng
schedule
09.01.2012