【发布时间】:2019-08-26 11:29:48
【问题描述】:
我正在尝试创建一个动态生成的输入字段数组,其中只有第一个和最后一个是可编辑的。当任一边界字段被修改时,其余的应通过在两个边界值之间进行线性插值来更新它们的值。下面的例子。
我编写了一个 (Django/Bootstrap) HTML 模板,它自己生成输入字段,只留下可编辑的边框字段并分配“-first”和“-last”id 扩展名。
我还编写了一个基本的 JavaScript,它接受两个输入值在和输出数组大小之间进行插值。
这就是输入字段的实例化方式。我开始编写一个 JS 函数“change_values()”,它会在 onchange 事件中被激活,但没有成功。
<div class="custom-control custom-linspace-field">
<div class="row" id="linspace-field">
{% for field in fields %}
<div class="col p-1">
{% if forloop.first %}
<input type="text" class="form-control" onchange="change_values()" id="linspace-field-first" value="{{ field | floatformat:3 }}" placeholder="min">
{% elif forloop.last %}
<input type="text" class="form-control" onchange="change_values()" id="linspace-field-last" value="{{ field | floatformat:3 }}" placeholder="max">
{% else %}
<input type="text" class="form-control" onchange="change_values()" id="linspace-field" value="{{ field | floatformat:3 }}" readonly>
{% endif %}
</div>
{% endfor %}
</div>
</div>
这是我的线性插值 JS 脚本:
function lerp(value1, value2, amount) {
step = (value2 - value1) / amount;
output = [value1];
var i;
for (i = 1; i < amount; i++) {
output.push(output[output.length - 1] + step);
}
output.push(value2);
output_round = [];
output.forEach(function(item) {
output_round.push(item.toFixed(2));
});
return output_round;
}
我希望找到一种方法以正确的顺序访问输入字段值,并在任一边框输入字段上触发 onchange 事件时更新它们。
基本上我的问题是:在 onchange 事件上调用的 change_values() 函数的代码应该是什么样的?
【问题讨论】:
-
首先,您的 html 中不应有多个具有相同
id值的元素。 -
@HelgeFox 有趣的是,您的评论为我指明了解决这个问题的正确方向。我检查了
id参数的实际用途,并意识到我可以为每个输入字段及其各自的索引生成一个唯一 ID,然后在 JS 函数中对它们进行适当的排序。 -
很高兴我能帮上忙 :)
标签: javascript html django forms events