Использование jQuery для динамического добавления полей формы (или наборов полей) на основе значения раскрывающегося списка
Как видно из заголовка, я пытаюсь сделать так, чтобы jQuery добавил несколько дополнительных наборов полей на основе значения, выбранного в раскрывающемся списке. Например, при загрузке страницы раскрывающийся список имеет значение по умолчанию, равное 1, и отображается набор полей по умолчанию. Теперь, если пользователь выберет другое значение в этом раскрывающемся списке, число наборов полей должно быть соответствующим образом скорректировано с помощью клонирования (я полагаю, это будет лучшим решением). Вот что у меня так далеко:
Код выпадающего списка ...
<select id="itemCount" name="itemCount">
<option value="1">1 item</option>
<option value="2">2 items</option>
<option value="3">3 items</option>
<option value="4">4 items</option>
<option value="5">5 items</option>
<option value="6">6 items</option>
</select>
... слушатель изменения jQuery ...
$(document).ready(function() {
$("#itemCount").change(function(){
var itemCountVal = jQuery(this).val();
$("#item_dup_1").fieldsManage(itemCountVal);
});
});
... и сама функция (на самом деле она основана на плагине jQuery, который, по моему мнению, послужил хорошей отправной точкой для того, что мне нужно):
jQuery.fn.fieldsManage = function (number) {
var clone,
objTemplate = source.clone(true),
source = jQuery(this),
maxClones = number - 1,
clones = [];
if (clones.length < maxClones) {
while (clones.length < maxClones) {
clone = objTemplate.clone(true).insertAfter(clones[clones.length - 1] || source);
clones.push(clone);
}
}
if (clones.length > maxClones) {
// Fieldsets removal function goes here.
}
}
Клонируемый объект - это что-то вроде<fieldset id="item_dup_1"><input><input><input></fieldset>
, Я не думаю, что необходимо показывать полный код для этого.
Это работает как талисман для первого изменения, но если пользователь снова изменяет значение, то когда все идет не так, и вместо того, чтобы показывать правильное количество наборов полей, он показывает больше. Похоже, что он вычисляет количество необходимых наборов полей, начиная с нуля, игнорируя тот факт, что наборы полей уже были добавлены, и в этом моя проблема. У меня также есть функция (не показанная здесь просто для ясности и краткости вопроса), которая присваивает новые идентификаторы клонированному набору полей, чтобы предотвратить дублирование идентификаторов, и которая работает без помех.
Я убежден, что я делаю что-то не так, но вот уже два дня я бьюсь головой об стену, пытаясь выяснить, что это такое, без всякой удачи, любая помощь будет более чем признательна!
Заранее спасибо !