动态生成的AJAX / JS计算器表单

时间:2013-06-18 20:54:33

标签: javascript forms user-input dynamic-data

我正在尝试制作一个基于加权输入生成值的表单。例如,如果我们在数据库中有以下内容

**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,如果它大大简化了答案。

2 个答案:

答案 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);
});

<强>样本:

http://jsfiddle.net/DYzsR/1/

答案 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将其作为运行总计而不是单个计算的想法。这真是一个突破点。