我正在尝试制作一个基于加权输入生成值的表单。例如,如果我们在数据库中有以下内容
**Item** _|_**Weight**
sink | 1.5
toilet | 2.5
shower | 3
一个看似这样的表单,使用AJAX从数据库构建(必须使用AJAX构建,因为输入的名称和输入数量取决于表单上一部分中的用户选择)
<form id="calculator">
...There are several field sets here...
<fieldset id="myFields">
<input type="text" class="iteminput" data-weight="1.5" name="sink" id="sink">
<input type="text" class="iteminput" data-weight="2.5" name="toilet" id="toilet">
<input type="text" class="iteminput" data-weight="3" name="shower" id="shower">
</fieldset>
</form>
如果用户输入X水槽,Y厕所和Z淋浴,我想自动计算其管道系统的总“值”,在这种情况下,X * 1.5 + Y * 2.5 + Z * 3。
我挂断的地方是如何获取每个输入的值。我想要做的是遍历#myFields中的所有输入,获取字段的值,以及data-weight属性的值,将它们相乘,然后将它们添加到运行总计中。我想在每个输入的onKeyUp事件附加的函数中完成所有这些操作。
感谢任何帮助,如有必要,可提供更多信息。
Javascript only解决方案是最好的,但我不反对使用jQuery,如果它大大简化了答案。
答案 0 :(得分:1)
这是一个jQuery示例:
您应该能够在模糊函数上获取输入的值。然后通过在输入上运行每个函数来更新值。像这样......
<ul>
<li>
<label>Number of X</label>
<input type="text" value="" id="x"/>
</li>
<li>
<label>Number of Y</label>
<input type="text" value="" id="y"/>
</li>
<li>
<label>Number of Z</label>
<input type="text" value="" id="z"/>
</li>
</ul>
<p>Total is: <span class="total"></span>
<强> jQuery的:强>
$('input').blur(function () {
var total = 0;
$('input').each(function() {
total += Number($(this).val());
});
$('.total').text(total);
});
<强>样本:强>
答案 1 :(得分:0)
这就是我最终要做的事情。
function calcFixtures()
{
var elements = [];
var total = 0;
elements = document.getElementsByClassName('fixtureinput');
for (var i=0; i<elements.length; i++) {
total += elements[i].value * elements[i].getAttribute("data-weight");
}
}
逻辑是,获取具有某个类的所有元素,循环遍历它们,并为每个元素获取data-weight属性的值,并将其乘以该元素的当前表单值。感谢@Kris将其作为运行总计而不是单个计算的想法。这真是一个突破点。