У меня есть форма в HTML, которая имеет объект формы из моего django ModelForms. Я хочу разрешить пользователю динамически добавлять или удалять копии одной и той же формы, если они выбирают. Аналогичный пример (онлайн демо) будет таким: http://viralpatel.net/blogs/dynamically-add-remove-rows-in-html-table-using-javascript/Как создать кратность одной формы для пользователя
Я просто не знаю, как начать работу, как у меня есть небольшой опыт работы с JavaScript. Любой вход был бы оценен.
Вот мой HTML код:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<form id="blockForm" class="original" action="{% url 'inventory:requests' inventory.id %}" method="post">{% csrf_token %}
<a href="#" id="insert-more"> Add New Row </a>
<div class="requestForm">
<div class="container">
<ul><li><input {{form.as_table}} /></li></ul>
</div>
</div>
<input type="submit" name="submit" value="Request Blocks" id="submitButton">
</form>
Вот JavaScript:
<script language="javascript" type="text/javascript">
function dupeForm() {
var reqs = document.getElementsByClassName('requestForm'),
btn = document.getElementById('submitButton'),
len = reqs.length,
lastReq = reqs[len - 1],
newReq = lastReq.cloneNode(true),
txtBxs = newReq.getElementsByTagName('ul');
// I am unsure what this for loop does -quanuw
for (var i = 0; i < txtBxs.length; i++) {
txtBxs[i].setAttribute('name', 'txt' + len);
txtBxs[i].setAttribute('id', 'txt' + len);
txtBxs[i].value = 'More Text';
}
lastReq.parentNode.insertBefore(newReq, btn);
}
var submitButton = document.getElementById('submitButton');
var insertLink = document.getElementById('insert-more');
insertLink.addEventListener("click", function(e) { e.preventDefault(); dupeForm(); }, false);
submitButton.addEventListener("click", function(e) { e.preventDefault(); }, false);
</script>
Вот мой ModelForm:
class Block(models.Model):
class Meta:
verbose_name_plural = "Request Blocks"
inventory = models.ForeignKey(Inventory, null=True)
block_status = models.CharField(max_length=12, default='STATUS')
block_name = models.CharField(max_length=50, default='BLOCKNAME')
block_derivatives = models.CharField(max_length=100, default='DERIVATIVES')
block_subsystems = models.CharField(max_length=32, default='SUBSYSTEMS')
owners = models.CharField(max_length=100, default='OWNERS')
def __str__(self):
return self.block_name
def block_owners(self):
return str(self.owners)
Как насчет формы ид? HTML имеет уникальный идентификатор для элементов – nikhil
Что вы имеете в виду? Не могли бы вы рассказать? – quanuw
Вы хотите создать копию формы? Теперь в элементе формы есть id blockForm. Если вы создадите копию формы, идентификатор новой формы будет blockForm, который не должен быть. – nikhil