为什么克隆 django 内联表单集会产生具有相似 ID 和名称的表单
Why does cloning the django inline formsets result to forms with similar ids and names?
在我的项目中,我使用 django 内联表单集。我让 jquery 克隆表单集,但不幸的是,克隆的表单具有相同的名称和 ID,因此在最后一个表单中输入的数据会覆盖第一个表单中的数据。我可能做错了什么?
这是脚本:
<script type="text/javascript">>
function cloneMore(selector, type) {
var newElement = $(selector).clone(true);
var total = $('#id_' + type + '-TOTAL_FORMS').val();
newElement.find(':input').each(function() {
var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
var id = 'id_' + name;
$(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');
});
newElement.find('label').each(function() {
var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
$(this).attr('for', newFor);
});
total++;
$('#id_' + type + '-TOTAL_FORMS').val(total);
$(selector).after(newElement);
}
</script>
我使用CloneMore.js脚本来实现相同的目的(此时我的版本已修改)。我不知道你是否是这种情况,但是如果你有任何被javascript修改的字段,你需要重新初始化该字段。例如,可能需要重置统一.js选择器、日期选取器或任何自动完成字段。
这是我在点击克隆按钮时处理其中一些问题的代码片段。另请注意,这些都在live()
// #add_more is my button to add a formset
$('#add_more').live('click',function() {
cloneMore('div.line_item:last', 'lineitem');
$(".line_item:last").find('.hasDatepicker').each(function() {
// remove then initialize datepicker
$(this).removeClass("hasDatepicker").datepicker( {dateFormat:'mm/dd/yy'} );
});
$(".line_item:last").find('.autocomplete_field').each(function() {
// remove then initialize autocomplete
$(this).autocomplete('destroy');
// enable_autocomplete is a custom function, but it's basically just
// $(this).autocomplete({ options... })
enable_autocomplete($(this), cust_part_url);
});
});
编辑:我认为这个SO答案是克隆的起源更多脚本
django formset 中的每个表单都提供了唯一的 name 属性,该属性充当 django 的一种 id,这意味着如果你克隆表单集中的第一个表单,这意味着你也将克隆它的 id,因此克隆它将覆盖第一个表单。
您可以使用/克隆 Baseformset 提供的empty_form,{{form.empty_form}}
,为其提供适当的名称并更新-TOTAL_FORMS
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何使用WCF服务和javascript表单post上传.doc文件
- Javascript生成的表单未提交
- 如何使用javascript或html下载PDF格式的填写表单
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- Ajax发布表单序列化,发布引号'
- 多级HTML表单
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在验证和发送邮件后更改联系人表单的 html
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- 如何从pdftron webviewer获取表单数据
- JS验证ajax返回的html中的表单数据
- Javascript更新孙窗口中的表单元素
- 解析javascript表单验证器
- 阻止表单元素提交
- 为什么克隆 django 内联表单集会产生具有相似 ID 和名称的表单
- 使用 angularJS 提交具有两个相似奉献值的表单时,在控制台中收到错误