假设我有以下表单集。
{% for form in formset %}
<tr style="border:1px solid black;" id="{{ form.prefix }}-row" class="dynamic-form" >
<td{% if forloop.first %} class="" {% endif %}></td>
{% render_field form.choicefield1 class="form-control" %}{{form.typeTiers.errors}}
</td>
<td>
{% render_field form.choicefield2 class="form-control" %}{{form.tiers1.errors}}
</td>
<td>{% render_field form.choicefield3 class="form-control" %}{{form.numfacture1.errors}}
</td>
</tr>
{% endfor %}
<td><input type="submit" name="ajoutligne" value="Ajouter une ligne" class="btn btn-primary" id="add-row" style="background-color: #8C1944; border-color: #8C1944; float:right;margin: 5px;" onclick="test()"></td></tr>
表单是使用添加的dynamic-formset.js
,我在下面的代码中调用它以在单击我的按钮时创建一个新表单:
$(function () {
$('#add-row').click(function() {
addForm(this, 'form');
});
})
我需要在我添加到表单集中的每一行上应用 jquery 函数。这就是为什么我创建了函数test
中调用的onclick
函数:
var jax= -1;
function test(){
jax =jax+1;
alert($('#id_form-'+jax+'-typeTiers').attr('name'));
$("#id_form-"+jax+"-typeTiers").change(function () {
alert($('#id_form-'+jax+'-typeTiers').attr('name'));
x="<option>5</option>";
y="<option>0</option>";
$("#id_form-"+jax+"-tiers").html(x);
$("#id_form-"+jax+"-numfacture").html(y);
});
}
我需要的是使我的行彼此独立,因此如果我更改第一行中的 field1,则只有同一行中的第二个字段会更改,而不会影响其他行。
但是我有两个问题:
第一个:当我首先加载页面时,我显示了第一行,但我无法在其上应用该test()
功能,因为test()
仅在单击“添加”按钮时才会执行。所以我不知道如何使它第一次工作。除此之外,test()
如果添加了第二行,则仅适用于第一行。同样的事情:test()
如果添加了第三行,则仅适用于第二行。
第二个:当我点击ajoutligne
按钮超过 1 次时,应该赋予同一行字段中的其他两个字段的x
和变量,它们显示在具有 jax 的最后一个值的行的字段上。y
$("#id_form-"+jax+"-tiers").html(x);$("#id_form-"+jax+"-numfacture").html(y);
例如:如果我点击了ajoutligne
3 次,那么jax=3
,如果我们在 中row 0
,这就是改变时应该发生的情况choicefield1
:
$("#id_form-"+0+"-tiers").html(x);$("#id_form-"+0+"-numfacture").html(y);
然而,这反而发生了:
$("#id_form-"+3+"-tiers").html(x);$("#id_form-"+3+"-numfacture").html(y);
我不知道如何解决它。我希望我解释清楚。
感谢您的帮助。