У меня есть объект карты, который я размещаю в Spring ModelAndView
в моем контроллере и пересылаю в мое представление jsp, чтобы заполнить выбор. После его заполнения в первый раз я хочу заменить объект карты, используемый для заполнения выбранного объекта json, который я извлекаю с помощью jquery AJAX и преобразования в объект с помощью jQuery.parseJSON. Могу ли я динамически заменить все содержимое элемента с содержимым объекта json?
Как вы обновляете все опции select с помощью jquery
Ответ 1
Для фактического изменения параметров вам не нужен jQuery. Вы можете очистить старые параметры, назначив свойству length
свойства options
в поле SELECT
, а затем добавьте новые параметры через #add
и new Option()
.
Вот несколько примеров использования jQuery для части XHR, а затем прямое выполнение опций:
Из массива:
Если вы рисуете данные из массива внутри объекта (в этом случае массив, идентифицированный свойством options
для результирующего объекта):
JSON:
{
"options": [
{"value": "New1", "text": "New Option 1"},
{"value": "New2", "text": "New Option 2"},
{"value": "New3", "text": "New Option 3"}
]
}
JavaScript:
$.ajax({
url: "http://jsbin.com/apici3",
dataType: "json",
success: function(data) {
var options, index, select, option;
// Get the raw DOM object for the select box
select = document.getElementById('theSelect');
// Clear the old options
select.options.length = 0;
// Load the new options
options = data.options; // Or whatever source information you're working with
for (index = 0; index < options.length; ++index) {
option = options[index];
select.options.add(new Option(option.text, option.value));
}
}
});
Непосредственно из объекта:
Если вы используете имена свойств объекта как значения option
и значения свойств в качестве текста опции:
JSON:
{
"new1": "New Option 1",
"new2": "New Option 2",
"new3": "New Option 3"
}
JavaScript:
$.ajax({
url: "http://jsbin.com/apici3/2",
dataType: "json",
success: function(data) {
var name, select, option;
// Get the raw DOM object for the select box
select = document.getElementById('theSelect');
// Clear the old options
select.options.length = 0;
// Load the new options
for (name in data) {
if (data.hasOwnProperty(name)) {
select.options.add(new Option(data[name], name));
}
}
}
});
Обновить: вместо
select.options.add(new Option(...));
вы также можете сделать:
select.options[select.options.length] = new Option(...);
..., который, я думаю, на самом деле я бы использовал метод add
для options
массива-like-thing (я не называю его массивом, потому что он имеет метод add
, что массивы не имеют, а потому, что если вы используете push
, какие массивы имеют, то это не работает).
Я тестировал оба метода на
- IE6,7,8 (Windows)
- Chrome (Linux и Windows)
- Firefox (Linux и Windows)
- Опера (Linux и Windows)
- Safari (Windows)
... и обе работают. Возможно, кто-то с Mac может попробовать Safari для OS X для меня.
Я бы сказал, что оба способа очень, очень хорошо поддерживаются.
Ответ 2
$.ajax({
type: 'POST',
url: getpolicytypeUrl ,
data: { sirket: companyname },
success: function (data) {
$.each(data, function(index, element) {
$('#policyshortname').append($('<option>', {
text: element.policyShortname
}));
$('#policyshortname').show(300);
});
}
});
$('#policyshortname').html('refresh',true);